2010-01-11 21 views
5

¿Tiene algún cuerpo alguna información/enlaces sobre cómo integrar un sistema de sesión basado en cookies? he usado file/mysql, y actualmente estoy usando memcached. Quería jugar con las sesiones de APC, pero pensé que probaría las cookies, solo que no sé mucho al respecto.php: sesiones basadas en cookies

me imagino que tendría que escribir mi propia clase de controlador de sesión?

+0

No estoy seguro de que lo siga. ¿Quiere decir almacenar datos de sesión en las cookies? ¿Es eso una buena idea? –

+0

Tenga en cuenta que las cookies solo pueden almacenar un máximo de '4KB' de datos. Por lo general, esta es la razón por la que no ve el almacenamiento de sesión basado en cookies.Tenga también en cuenta que una cantidad de usuarios tienen cookies desactivadas por completo o configuradas para acceso restrictivo con la política de seguridad de sus navegadores. –

+1

@cballou: las sesiones antiguas normales generalmente también usan cookies. Sin embargo, solo almacenan el SESSID, y el resto de los datos se almacenan en el servidor. Aunque creo que PHP tratará de rellenar el SESSID en el parámetro 'GET' si las cookies están deshabilitadas. – mpen

Respuesta

5

En PHP, los datos de la sesión generalmente se almacenan en un archivo. Lo único almacenado en la cookie es un identificador de sesión. Cuando las sesiones están habilitadas y se encuentra una cookie de sesión válida, PHP carga los datos de la sesión de los usuarios desde el archivo a un superglobal llamado SESIÓN, curiosamente.

Las sesiones básicas se inician utilizando session_start(); llamadas antes de que se envíe texto al navegador. a continuación, los elementos se agregan o se eliminan del objeto de sesión utilizando la indexación de matriz simple, por ejemplo.

$_SESSION['favcolour'] = 'blue'; 

después ...

$favcolour = $_SESSION['favcolour']; 

galletas básica sólo sesiones (sin almacenamiento local) se pueden crear con una llamada a

set_cookie('favcolour','blue'[,other params]); 

antes de cualquier texto se envía al navegador, luego recuperado de la cookie superglobal

$favcolour = $_COOKIE['favcolour']; 

no necesita llamar al session_start() si solo está haciendo sesiones de cookies.

los opcionales [params], otros son más avanzados y se pueden leer aquí http://www.php.net/manual/en/function.setcookie.php

Las sesiones pueden convertirse en una discusión muy compleja, sugeriría haciendo un trabajo ligero en ellos y luego ampliar su conocimiento.

DC

todo lo que siempre quiso saber acerca de las sesiones de PHP

http://www.php.net/manual/en/book.session.php

DC

Para volver a utilizar el código de manejo de sesiones de PHP, necesitará agregar un controlador de escritura usando session_set_save_handler y luego no hacer exactamente nada en ese controlador. Esto se debe a que se llama después de que se cierra la salida del navegador, por lo tanto, no se puede enviar nada al navegador.

Antes de escribir datos sin encabezado en el navegador, use las funciones set_cookie y almacene los contenidos de la matriz $ _SESSION (después de serializar y encriptar) en una cookie. cuando comienzan las aplicaciones, puede leer la cookie desserializarla y ponerla en la matriz $ _SESSION.

Eso es una pista rápida de qué hacer ya que nunca lo he hecho, prefiero escribir mi propio código de cookie. Puede haber algunos gotcha pero no es difícil, algunas pruebas deberían encontrar cualquier gotcha.

DC

+0

Aunque probablemente no vaya solo a cookies, especialmente si no quieres que los usuarios manipulen (o lean) los datos. – mpen

+0

si tiene un sitio web muy ocupado, las sesiones basadas en archivos requieren demasiados recursos. pero si quería seguridad por encima de todo, usaría un db, porque los archivos se pueden leer. – DeveloperChris

+2

No necesito saber cómo usar sesiones. Lo entiendo completamente. las sesiones basadas en cookies (no el almacenamiento de identificador en las cookies) es una técnica válida que minimiza el número de búsquedas de servidor db/archivo/caché y almacena todos los datos de una sesión en una cookie cifrada. Supongo que aquí nadie entiende lo que quiero decir. – onassar

Cuestiones relacionadas