2011-04-25 16 views
10

Para cerrar la sesión de un usuario de mi sitio web, estoy redirigiendo la página al logout.php donde estoy usando la función session_destroy(). Incluso allí, la funcionalidad de cierre de sesión no funciona sin la función session_start(). Al agregar la función session_start() antes de la función session_destroy(), puedo cerrar la sesión del usuario con éxito.PHP session_start() function: Por qué lo necesito cada vez que uso algo relacionado con las sesiones PHP

¿Por qué necesito usar la función session_start() cada vez y en cada página donde estoy haciendo algo relacionado con las sesiones?

Respuesta

12

session_destroy() destruye la sesión activa. Si no ha inicializado la sesión, no habrá nada que destruir.

+1

Entonces, ¿debo inicializar la sesión en todas y cada una de las páginas en las que los usuarios que inician sesión solo pueden ver la página? Pensé que al llamar a session_start() cada página llega a saber que hay una variable de sesión establecida. –

+1

Absolutamente. Si alguna vez se trata de sesiones en la solicitud, debe llamar a session_start() para darle a PHP la información de la sesión. –

+0

O podría usar session.auto_start = 1 (no es una buena práctica, pero es posible =) – alexglue

12

¿Por qué tengo que usar la función session_start() cada vez y en cada página donde estoy haciendo algo relacionado con las sesiones?

Así PHP sabe qué sesión destruir. session_start() busca si una cookie o ID de sesión está presente. Solo con esa información puedes destruirlo.

+0

Gracias Pekka por la respuesta. ¿Puedo crear más de una sesión? Por ejemplo, invoco la función session_start() 4 veces. Crea 4 sesiones? –

+2

Es probable que solo estés creando una sola sesión. Después de llamar a su primera session_start(), a menos que especifique una identificación de sesión diferente para las llamadas subsiguientes session_start(), está configurada por defecto en la ID de la sesión original (almacenada en la cookie o url de los usuarios). –

+0

@iSumitG Lo que dice @John. Creo que iniciar una sesión más de una vez incluso arroja un error, y no tendría sentido en primer lugar –

3

En la configuración predeterminada, las sesiones de PHP operan fuera del disco duro. PHP le pide que le indique explícitamente cuándo necesita este soporte para evitar un IO de disco innecesario.

session_start() también le dice a PHP que busque si existe la sesión del usuario.

3

session_start() crea una sesión o reanuda el actual basado en un identificador de sesión de pasado a través de una petición GET o la POST , o se pasa a través de una cookie.

según http://php.net/manual/en/function.session-start.php

Esencialmente llamando session_start(), PHP lee la cabecera y las referencias cruzadas que ID de sesión a lo que es en su sistema (sistema de archivos/base de datos/etc), que a su vez puede poblar el $_SESSION que es relavent para ese usuario específico. Lo que a su vez le permite llamar al session_destroy() porque sabe qué sesión realmente destruir.

0

considere session_start() como su manera de decirle al motor de php .... que desea trabajar con las sesiones.

y, según tengo entendido, siempre hacen que sea la primera línea en la página php.

0

Estaba confundido con el uso de session_start(); y cada vez que estaba usando una variable de sesión, estaba llamando a session_start. Precisamente, tenía session_start(); más de una vez en cada página (sin incluso llamar a session_destroy()). Por ejemplo,

// 1st call 
session_start(); 

if (!isset($_SESSION['UserID']))  
{  
    // Do something  
} 

else 
{ 
    // Do something else 
} 

// .... some other code 

// 2nd call 
session_start(); 

if (!isset($_SESSION['UserID']))  
{  
    // Do something totally different 
} 

else 
{ 
    // Do something else totally different 
} 

Esto estaba creando un problema de rendimiento para mí. Así que terminé llamando al session_start(); solo una vez en la parte superior de la página y todo parece estar funcionando bien.

0

usted tiene que llamar a session_start una vez (y sólo una vez) en todos los archivos que desea sesiones para trabajar en.

Un enfoque común que le permite sólo para llamar una vez es tener un archivo despachador como su índice.php; llama a session_start aquí y haz que esta página incluya otras basadas en $ _GET de la url.

<?php 
    session_start(); 
    if(isset($_GET['page']) && file_exists('pages/'.$_GET['page'].'.php') { 
     include $_GET['page']; 
    } 
?> 
//www.mysite.com/index.php?page=fish will display /pages/fish.php with session access