Las variables tipo COOKIES y las VARIABLES tio $_SESSION tienen el mismo fin que es mantener informacion necesaria de la aplicacion durante la navegacion del usuario ya que recuerda que HTTP es un protocolo sin estado (osea que una peticion es independiente de cualquier otra osea que los datos se pierden por cada peticion al servidor si esos no son guardados en sesion).
La diferencia entre Las COOKIES y las variables de SESSION es quien tiene control sobre ellas.
---En las COOKIES El usuario tiene control sobre ellas ya que puede borrar o modificar el valor de una variable tipo COOKIE desde su navegador, sobre todo si es un usuario con conocimiento y tiene un navegador como FIREFOX con sus plugins que uedes hacer de todo......
---Las Variables de tipo $_SESSIO[] el desarrollador como un WebMaster tiene control sobre ellas y son "los unicos" que deberian poder eliminar o modificar valores sobre ese tipo de variables.....
Lo bueno entre las COOKIES es que como se guardan en el Cliente no Ocupan espacio en Disco en el servidor.....
Lo bueno en las variable $_SESSION es que no existe alguna restriccion si el usuario acepta o no aceta COOKIES.
Lo mejor es usar $_SESSION para validar el caso que dices de tener activas o desactivas las COOKIES...... Pero te sugiero no guardes todo en sesion solo datos sumamente necesarios como el id de un usuario, datos criticos de la aplicacion etc.... ya que si guardas todo en session los archivos de sesion podrian ser muy pesados haciendo lento al servidor y sus aplicaciones.
P.D. Hoy en dia muchas aplicaciones utilizan COOKIES sin importarles tu dilema. Si el usuario no acepta COOKIES pues sencillamente o mandan un mensaje de error o la aplicacion vuelve al principio y listo...... Eso es un problema como el que este activo o no javascript por ejemplo........ Un problema que se nos escapa de las manos ya que esta en decision del TodoPoderoso "USUARIO FINAL".....................
Espero haberte ayudado..........