2012-06-22 17 views
9

¿Cuál es la mejor manera de mantener al usuario conectado en un sitio con PHP hasta que cierre su navegador?Secuencia PHP o cookie

La primera y la forma más popular es ir con $_SESSION. El segundo es pasar el cero como tercer argumento de la función setcookie: setcookie(name, value, 0, domain);

+5

Sesión realmente utiliza cookies para almacenar la @AlvinWong SID –

+1

lo sé, pero mi pregunta es ¿cuál es mejor usar en PHP – treng

Respuesta

18

Como sesión de PHP realmente almacena el SID por cookie (por supuesto se pueden utilizar otras formas de establecer la SID si se quiere), no habría mucha diferencia cuando el simple uso de ellos.

La principal diferencia es la seguridad, porque si utiliza cookies directamente, los clientes pueden verlas o editarlas ellas mismas, pero para la sesión los datos se almacenan en el servidor para que el cliente no pueda acceder directamente.

Entonces, si los datos solo duran para esa sesión, prefiero usar la sesión.

Nota al margen: si utiliza varios servidores para equilibrar la carga, debe tener mucho cuidado porque los datos de la sesión se almacenan localmente en el servidor de manera predeterminada. Es posible compartir datos de sesión en varios servidores, pero esto es beyond the scope of this question. Alternativamente, puede almacenar datos en una base de datos.

+2

aún puede usar sesiones en un entorno de servidores múltiples. al guardar la sesión en memcache (http://php.net/manual/en/memcached.sessions.php) – Rizon

3

Una sesión es para este fin, así que iría con eso.

3

"Las sesiones no dependen de que el usuario permita una cookie. En su lugar funcionan como un token que permite el acceso y la transmisión de información mientras el usuario abre el navegador. El problema con las sesiones es que cuando cierras tu navegador también pierdes el Por lo tanto, si tuviera un sitio que requiera un inicio de sesión, esto no podría guardarse como una sesión como podría hacerlo como una cookie, y el usuario se vería obligado a volver a iniciar sesión cada vez que visite

Puede ¡Por supuesto, obtenga lo mejor de ambos mundos! Una vez que sepa lo que hace cada uno, puede usar una combinación de cookies y sesiones para hacer que su sitio funcione exactamente como usted lo desea ".

http://php.about.com/od/learnphp/qt/session_cookie.htm

1

Yo usaría $ _SESSION como su más fácil. : P De todos modos, como se mencionó anteriormente, decida su caso ... si necesita mantener al usuario conectado por un tiempo, incluso después de que se haya cerrado el navegador, use la cookie de forma adecuada. ¡Puede ser una amenaza de seguridad para ti! de lo contrario, usa la sesión.

4

Le sugiero que vaya a sesiones de PHP. Es simple y no tiene que lidiar con las cookies usted mismo.

A continuación se muestra el código para destruir realmente una sesión, copiar y pegar desde el example que figura en el manual de PHP.

// Initialize the session. 
// If you are using session_name("something"), don't forget it now! 
session_start(); 

// Unset all of the session variables. 
$_SESSION = array(); 

// If it's desired to kill the session, also delete the session cookie. 
// Note: This will destroy the session, and not just the session data! 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 

// Finally, destroy the session. 
session_destroy(); 

Sobre su pregunta:

Qué es mejor usar para mantener el usuario ha iniciado sesión hasta que cierra su navegador?

No hay forma de prueba de fallas cuando el usuario ha cerrado el navegador. Un enfoque es seguir enviando continuamente pequeñas solicitudes AJAX al servidor. Cuando no se ve ninguna solicitud durante un período de tiempo prolongado, destruya la sesión.

Otro enfoque es escuchar la descarga de la ventana DOM y enviar una solicitud al servidor para destruir la sesión.

3

Debe usar $ _SESSION

Porque si las cookies están habilitadas, a continuación, una cookie se utiliza de todos modos para el identificador de sesión de PHP. Entonces, escribir otra cookie no es óptimo.

La única razón por la que desearía utilizar una cookie en lugar de una sesión, es si desea encargarse del equilibrio de carga. Entonces, si tiene 2 servidores y uno de ellos falla, la sesión en ese servidor se perderá. Ahora se le pedirá al usuario que inició sesión (que tuvo sesión en el servidor 1) que inicie sesión de nuevo. Pero si tuviera una cookie en su lugar, no se le pediría que vuelva a iniciar sesión.

2

cookie se limita para cada dominio puede establecer 20 cookies y el tamaño máximo de cada uno es de 4 kb

Cuestiones relacionadas