2010-09-05 20 views
2

Je n'arrive pas à forcer le redémarrage des sessions en PHP. Voici le problème:PHP session_id() n'acceptant pas l'identifiant de session existant

Je peux obtenir ma carte d'identité de session avec session_id(), copier et ajouter au sommet de mon script:

session_id('the_session_id'); 
session_start(); 

Et quand j'ouvre un nouveau navigateur, la session de l'autre le navigateur n'est pas transféré. Quels paramètres puis-je vérifier?

+0

"quand j'ouvre un nouveau navigateur" - voulez-vous dire comme si vous avez FF, puis ouvrez IE? –

+0

Avez-vous trouvé une solution à ce problème parce que j'ai besoin de la même chose avec ma session? –

Répondre

0

Raison:

Si vous fermez la fenêtre du navigateur et ouvrez-le à nouveau, puis à ce moment, une deuxième session est démarré avec un ID différent, si l'application Web utilisée a un système d'authentification basé sur la session de l'utilisateur doit se reconnecter. En même temps, l'utilisateur doit se déconnecter deux fois!

Solution:

Cette fonction utilise un vrai biscuit pour l'ID de session et met à jour l'heure d'expiration à chaque exécution du script. L'expiration est égale à la directive PHP "gc_maxlifetime" (par défaut) ou à chaque valeur personnalisée. Alors, mettez cette fonction dans votre fichier PHP. Nous en aurons besoin.

<?php 

// $expire = the time in seconds until a session have to expire 
function start_session($expire = 0) 
{ 
    if ($expire == 0) 
     $expire = ini_get("session.gc_maxlifetime"); 
    else 
     ini_set("session.gc_maxlifetime", $expire); 

    if (empty($_COOKIE['PHPSESSID'])) 
    { 
     session_set_cookie_params($expire); 
     session_start(); 
    } 
    else 
    { 
     session_start(); 
     setcookie("PHPSESSID", session_id(), time() + $expire); 
    } 
} 

?> 

Maintenant, dans le haut de votre page où vous l'émission session_id('the_session_id'); et session_start();, supprimer ces lignes et commencer la session avec ce code ci-dessous:

Pour démarrer une session avec un temps donné par la fin configuration php

start_session(); 

Pour démarrer une session qui expirera en 1 heure:

start_session(3600); 
+0

Merci. Permettez-moi d'être un peu plus précis sur ce que je fais parce que je pense que cela fait une différence. J'utilise un téléchargeur flash, et quand le plugin Flash exécute le script de téléchargement PHP, la session se brise, et j'obtiens un 302. Donc je passe PHPSESSID en tant que parametre avec la requête Flash, et sur chaque page j'ai : si (isset ($ _ POST ['PHPSESSID'])) { session_id ($ _ POST ['PHPSESSID']); session_start(); } Mais quand je jette le $ _SESSION, il est toujours vide quand l'identifiant de session est assigné dans ce bloc. Il semble fonctionner correctement sur la plupart des serveurs. Cette technique est-elle bloquée par les paramètres de php.ini? –