2008-10-27 9 views
6

J'écris du code PHP où je veux passer l'identifiant de session moi-même en utilisant POST. Je ne veux pas qu'un cookie stocke la session, car il devrait être perdu lorsque l'utilisateur sort du cycle POST. PHP configure automatiquement le cookie là où il est disponible. J'ai appris qu'il est possible de changer ce comportement en mettant session.use_cookies à 0 en php.ini. Malheureusement, je n'ai pas accès à ce fichier et je ne voudrais pas non plus casser le comportement des autres scripts s'exécutant sur le même serveur.Comment désactiver le cookie de session PHP?

Existe-t-il un moyen de désactiver ou d'annuler le cookie de session dans le script PHP? Comme les solutions proposées ne fonctionnent pas pour moi, j'ai utilisé $ _SESSION = array() à des positions dans le code où j'ai trouvé que la session devait être invalidée.

Répondre

6

dans l'erreur il est possible de remplacer les paramètres par défaut de votre hôte en créant votre propre fichier .htaccess et est ici un super tutoriel si vous n'avez pas encore touché http://www.askapache.com/htaccess/apache-htaccess.html

ou si vous êtes trop paresseux pour apprendre il suffit de créer un fichier « .htaccess » (oui c'est le nom de fichier) sur vos sites répertoire et placez le code suivant

SetEnv session.use_cookies='0'; 
+0

Merci, malheureusement, ce n'est pas Apache, mais très vieux Netscape Server .. – ypnos

+0

oh google est toujours notre ami^_^ juste dites-moi le nom du serveur et je vais essayer de trouver des réponses là hehehe – lock

+0

Vous pouvez également essayer faire header_remove ('Set-Cookie'); après votre appel session_start(). –

28

Utilisation ini_set():

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

Ou dans votre fichier php.ini:

session.use_cookies = 0 
+0

Merci. Cela devrait résoudre mon problème, mais malheureusement, PHP s'arrête maintenant au milieu de l'exécution du script maintenant (même au milieu de la sortie html) .. – ypnos

+0

Je ne vais pas marquer cela comme étant la bonne réponse car elle a fait de PHP défunt. Peut-être un bug PHP? – ypnos

+0

Il semble que rien ne se passe. La solution htaccess a fonctionné pour moi. – Heroselohim

2

Vous pouvez également mettre cette mise en .htaccess il applique à tous les scripts, sinon vous besoin de s'assurer que le code est appelé sur chaque demande.

Par exemple.

php_value session.use_cookies 0

+0

Merci, malheureusement, le site fonctionne sous Netscape Server! :( – ypnos

+0

Cela fonctionne pour moi très bien. – nalply

+0

Merci beaucoup! – Heroselohim

-2

La façon de le faire est de sessions de configuration vous-même.

Dans le fichier d'inclusion central que tous vos autres fichiers incluent (vous en avez un, n'est-ce pas?), Vous devez faire quelques opérations le plus tôt possible. Maintenant vous avez

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

session_id($sessionid); 
session_start(); 

de se rappeler que, dès que vous commencez à la forme, vous devez inclure:

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

Ceci est une très mauvaise idée, juste en utilisant le passé sessionid vous rend vulnérable aux attaques de fixation de la session. Et ne pas désactiver cookie mécanisme de PHP. – hotzen

+1

Il Il y a un risque à commenter les vieilles réponses: celui qui a créé la réponse pourrait même ne pas se souvenir pourquoi il a répondu de cette façon. – staticsan

2

Si vous avez juste besoin d'être en mesure de zapper une session à un moment donné, l'utilisation session_destroy(). Si vous souhaitez mettre fin complètement la session, voici une copie d'extrait/collé de la documentation droite:

// 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

j'avais des problèmes avec l'approche de PHP documenté pour détruire une session 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"] 
    ); 
} 

Cela a été traduit dans mon voyant le cookie mis deux fois:

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

Comme indiqué dans les commentaires PHP, le réglage de la valeur du cookie autre chose que vide (« ») se débarrasse de la " supprimé "valeur, mais le deuxième ensemble de cookies est resté.

Pour se débarrasser de cela, je devais ajouter le code suggéré ci-dessus:

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

Je ne l'ai pas regardé à la source pour la manipulation des sessions, mais je pense que setcookie (...) est en contournant le module des sessions, les sessions ne savent pas que je l'ai appelé. Donc, il est en train de définir un cookie par défaut après avoir configuré un cookie supprimé.

je testais sur un Mac: PHP 5.3.6 avec Suhosin-Patch (cli) (construit: 8 septembre 2011 19:34:00)