2008-10-27 22 views
6

Estoy escribiendo el código PHP donde quiero pasar la identificación de la sesión usando POST. No quiero una cookie para almacenar la sesión, ya que se perderá cuando el usuario salga del ciclo POST.Cómo deshabilitar la cookie de sesión de PHP?

PHP establece automáticamente la cookie donde esté disponible. Aprendí que es posible cambiar este comportamiento estableciendo session.use_cookies en 0 en php.ini. Lamentablemente, no tengo acceso a ese archivo y tampoco me gustaría romper el comportamiento de otros scripts que se ejecutan en el mismo servidor.

¿Hay alguna forma de desactivar o anular la cookie de sesión dentro del script PHP?

EDIT: Como las soluciones propuestas no funcionan para mí, usé $ _SESSION = array() en las posiciones en el código donde encontré que la sesión debe ser invalidada.

Respuesta

6

yerran su posible sustituir la configuración por defecto de su anfitrión creando su propio archivo .htaccess y he aquí una gran tutorial si aún no has tocado eso http://www.askapache.com/htaccess/apache-htaccess.html

o si eres demasiado perezoso para aprender Basta con crear un archivo ".htaccess" (sí que es el nombre del archivo) en su directorio de sitios y coloque el código siguiente

SetEnv session.use_cookies='0'; 
+0

Gracias, desafortunadamente no es Apache pero el Servidor Netscape es muy viejo. – ypnos

+0

oh google es siempre nuestro amigo^_^ solo dime el nombre del servidor y trataré de encontrar respuestas allí hehehe – lock

+0

También podrías probar haciendo header_remove ('Set-Cookie'); después de la llamada session_start(). –

28

Uso ini_set():

ini_set('session.use_cookies', '0'); 

O en su archivo php.ini:

session.use_cookies = 0 
+0

Gracias. eso debería resolver mi problema, pero desafortunadamente, en cambio, PHP se detiene en medio de la ejecución del script ahora (incluso en el medio de la salida html) .. – ypnos

+0

No etiquetaré esto como la respuesta correcta ya que hizo que PHP desapareciera. Tal vez un error de PHP? – ypnos

+0

Parece que no pasa nada. La solución htaccess funcionó para mí. – Heroselohim

2

También se puede poner en que la fijación de .htaccess por lo que se aplica a todos los scripts, de lo contrario necesita asegurarse de que se invoque el código en cada solicitud.

Ej.

php_value session.use_cookies 0

+0

¡Gracias, desafortunadamente el sitio está ejecutando Netscape Server! :( – ypnos

+0

Esto me funciona muy bien. – nalply

+0

¡Muchas gracias! – Heroselohim

-2

La manera de hacerlo es a sesiones de configuración usted mismo.

En el archivo de inclusión central que incluyen todos sus otros archivos (usted tiene uno de ellos, ¿verdad?), Necesita hacer algunas cosas tan pronto como sea posible.

if(!array_key_exists('sessionid', $_POST)) { 
    // recreate the sessionid 
    $sessionid = md5(rand().' '.microtime()); // Or something 
} else { 
    $sessionid = $_POST['sessionid']; 

session_id($sessionid); 
session_start(); 

Ahora usted tiene que recordar que tan pronto como se inicia el formulario, es necesario incluir:

<input type='hidden' name='sessionid'><?= session_id() ?></input> 
+0

Esta es una muy mala idea, solo usar el sessionid pasado lo hace propenso a los ataques de fijación de sesión. Y no deshabilita el mecanismo de cookie de PHP. – hotzen

+1

Hay es un riesgo al comentar viejas respuestas: que quien haya creado la respuesta quizás ni siquiera recuerde por qué respondió de esa manera. – staticsan

2

Si sólo tiene que ser capaz de hacer zapping una sesión en un momento dado, el uso session_destroy(). Si desea finalizar la sesión por completo, aquí está una copia fragmento/pegado directamente de la documentación:

// 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 (isset($_COOKIE[session_name()])) { 
    setcookie(session_name(), '', time()-42000, '/'); 
} 

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

yo estaba teniendo problemas con el enfoque documentado de PHP para destruir una sesión w/cookies.

// 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"] 
    ); 
} 

Esto se traduce en mi ver la cookie establece dos veces:

Set-Cookie: SESSION_NAME=deleted; expires=Sat, 08-Jan-2011 14:09:10 GMT; path=/; secure 
Set-Cookie: SESSION_NAME=1_4f09a3871d483; path=/ 

tal como se documenta en los comentarios de PHP, estableciendo el valor de la cookie a algo que no sea vacía ('') se deshace de la " "valor eliminado", pero el segundo conjunto de cookies permaneció.

para deshacerse de eso, he tenido que añadir el código sugerido más arriba:

ini_set('session.use_cookies', '0'); 

No he mirado en la fuente para las sesiones de manipulación, pero mi conjetura es que setcookie (...) es eludiendo el módulo de sesiones, por lo que las sesiones no saben que lo llamé. Por lo tanto, es establecer una cookie predeterminada después de configurar una cookie eliminada.

que estaba probando en un Mac: PHP 5.3.6 con Suhosin-Patch (CLI) (construido el 8 septiembre 2011 19:34:00)

Cuestiones relacionadas