2009-05-27 10 views
6

Je suis à perte ici. J'ai un groupe spécifique d'utilisateurs à l'étage dont les sessions semblent expirer complètement au hasard. Ce n'est pas seulement quand ils quittent le site pendant un certain temps, il peut expirer pendant qu'ils naviguent. Pour moi et la plupart de nos utilisateurs tout fonctionne très bien. Ce n'est pas un problème de navigateur, nous avons des gens dans FF et toutes les versions d'IE qui fonctionnent correctement, et les gens dans FF et IE qui ne fonctionnent pas.Sessions PHP Expiration inattendue

Mon gc_maxlifetime est à 43200 et le garbage collection est une faible folie 1/1000 (pas que cela devrait importer). Est-il possible qu'il y ait quelque chose d'autre sur le serveur qui supprime aléatoirement certaines de nos sessions? Que dois-je vérifier? Cela n'expliquerait toujours pas pourquoi seul ce groupe spécifique semble être affecté.

J'ai quelques paramètres de session qui sont différents de la valeur par défaut:

session.gc_maxlifetime = 43200 
session.gc_divisor = 1000 
session.save_path = /var/lib/php/session 
session.use_only_cookies = Off 
session.bug_compat_42 = Off 

Les trois premiers, je ne suis pas inquiet, mais pourrait les deux derniers être à l'origine de ce comportement? Je n'envoie jamais de cookies via l'URL, donc je n'ai pas de bonne raison d'utiliser use_only_cookies. Je n'ai aucune garantie que les marginaux qui ont fait cette application avant que je suis arrivé ici n'exploitent pas la chose bug_compat_42 pour définir les variables de session, mais encore une fois, je m'attendrais à un problème avec cela pour être moins aléatoire.

Edit:

sur une enquête plus approfondie, j'ai trouvé que la session ne soit pas détruit du tout, mais l'utilisateur final est d'obtenir un nouvel ID de session. L'ancienne session existe toujours sur le serveur, mais une nouvelle session est démarrée au hasard pendant la navigation. Pouvez-vous fournir un peu plus d'informations sur votre configuration?

+0

L'une des deux choses se passe: le fichier de session sur le serveur est en cours de suppression, ou le cookie de session arrive à son terme. J'essaierais d'isoler un cas de l'un ou de l'autre, puis de travailler à partir de là. –

+0

J'ai déterminé que ce n'est pas la session qui est supprimée. Comment puis-je vérifier si le cookie expire? –

Répondre

5

Le problème ici est que le navigateur a mis le cookie de session à expiration prématurément. J'ai résolu le problème avec ce bidouillage sale et sale que vous n'auriez jamais dû utiliser.Je ne suis pas fier, mais si cela brille un peu de lumière sur quoi que ce soit ne hésitez pas à me laisser:

if (!headers_sent()) { 
    if ($_COOKIE["PHPSESSID"] != "") { 
     setcookie("PHPSESSID", $_COOKIE["PHPSESSID"], time()+43200, "/", ".mydomain.com"); 
    } 
} 
+0

Savez-vous quels navigateurs ont été affectés par ce problème, nous voyons quelque chose de similaire avec certains utilisateurs qui utilisent IE10 seulement .. – Cliffordlife

+0

Un code très similaire est la note la plus populaire pour session_set_cookie_params sur le site php. Cela semble être quelque chose que vous devez faire pour que les choses fonctionnent correctement. http://www.php.net/manual/en/function.session-set-cookie-params.php#100657 –

+0

J'ai eu le même problème que vous, mais sur l'hébergement payant. Je n'arrivais pas à comprendre ce qui pouvait causer une expiration prématurée, alors je l'ai fait de la même manière que vous. Merci. – HelpNeeder

1

Ma première pensée serait qu'il y a quelque chose de nettoyage aléatoire de votre répertoire de fichiers temporaires. Si vous utilisez une configuration LAMP standard, PHP stockera les fichiers de données de session dans/tmp. Si elles sont supprimées à partir de là par un processus de nettoyage, vous perdriez vos sessions.

Edit: Je repense à cela maintenant. Si seulement un groupe spécifique d'utilisateurs est affecté, cela le rend beaucoup moins probable.

Que diriez-vous des réglages de cookie? Je m'assurerais que ces personnes n'utilisent pas quelque chose comme un proxy dynamique, et que vos cookies sont définis pour le domaine racine de votre site. Est-il possible qu'ils aient un logiciel de nettoyage de la confidentialité tel que CCleaner configuré comme une tâche planifiée qui pourrait supprimer leurs cookies? Je me lève sur l'un de leurs ordinateurs et lance Firebug sur l'une des machines Firefox et examine les requêtes HTTP pour voir si les cookies sont correctement envoyés.

+0

Comme je l'ai dit, j'ai considéré cette option mais je ne pense pas que cela produirait le comportement que je reçois. Si quelque chose nettoyait les sessions, je m'attendrais à ce que tout le monde soit simultanément déconnecté. Au lieu de cela, seul un petit groupe de personnes est déconnecté au hasard. Quelles autres informations sur la configuration seraient utiles? –

+0

Vous pouvez vérifier tous les paramètres de votre session. Il y a une liste à http://ca2.php.net/manual/fr/session.configuration.php. – zombat

1

Je voudrais installer un sniffer http comme httpwatch (payé mais vaut chaque centime) ou fiddler (gratuit) sur ces machines et voir ce qui se passe avec les cookies de session (je pense que c'est PHPSESSID, mais pas sûr). Si le cookie est supprimé ou modifié au milieu de la session à cause de proxies, d'une configuration bizarre d'Apache ou de quelque chose, ce serait la meilleure façon de le détecter.

1

Je sais que ce retard. Mais juste pour certaines personnes qui ont le même problème.

[Si vous cryptez et décrypter vos données]

J'ai couru cette question et il m'a fallu un certain temps pour comprendre ce qui est le problème. Il continue à créer un nouvel ID de session pour le même utilisateur. Il s'avère que les données de cryptage et les données de décryptage ne sont pas identiques. Les données de déchiffrement retournent avec des espaces blancs supplémentaires. Essayez de vérifier votre valeur de données lors de l'envoi et du retour de la base de données ou de tout autre stockage que vous utilisez.

0

Dans mon projet, une bibliothèque est utilisée pour sécuriser la session, parfois j'ai observé que ma session est détruite soudainement.

https://github.com/ezimuel/PHP-Secure-Session/blob/master/SecureSession.php

D'abord, je veux ton savoir quel est le but de cette bibliothèque, nous pouvons à ces paramètres de php.ini ainsi.

KEY _... un nouveau créé ce qui est l'utilisation de cette clé.

Lorsque j'utilise print_r intérieur ouvert(), je reçois ci-dessous exemple de résultat

Hqx_SecureSession Object 
(
    [_debug:Hqx_SecureSession:private] => 
    [_key:protected] => 5ò™6žÝ°rIÐß'k Êii07ÀtCzª[email protected]ü¸"‡ÄCžA¼ÿ£g{IP 
    [_path:protected] => c:\hqp\xampp_1.7.4\tmp\ 
    [_name:protected] => PHPSESSID 
    [_ivSize:protected] => 16 
    [_keyName:protected] => KEY_PHPSESSID 
    [_cookieParams:protected] => Array 
     (
      [lifetime] => 7200 
      [path] =>/
      [domain] => dev.autoquotes.insurance.com 
      [secure] => 
      [httponly] => 1 
     ) 

    [_sessionId:protected] => 
    [_logger:Hqx_SecureSession:private] => 
) 
htq827r4rjh9ob05nhlqb8vmd5ai52djb0bd0l42vk9un26df541c:\hqp\xampp_1.7.4\tmp