2009-09-29 8 views
2

Ce problème m'a rendu fou. Sur deux projets distincts (tous deux utilisant PEAR comme bibliothèques mais écrits sur des frameworks complètement différents), j'utilise PEAR Auth pour l'authentification qui utilise la session. Après la connexion, les utilisateurs sont déconnectés en l'espace d'une heure environ. Je n'ai pas l'heure exacte, mais c'est très court.PHP PEAR Auth expiration de la session d'authentification

J'ai essayé ce qui suit sans succès. Toutes les tentatives d'étendre la session à un jour, juste pour clouer le point à la maison.

<?php 
// Tried built-in methods to extend the idle time, called after Auth is initialised 
$auth->setIdle(86400); 

// Tried increasing the sesion timeout (before auth is called) 
ini_set('session.gc_maxlifetime', 86400); 

// Tried increasing the cookie timeout (where the phpsession is held, before auth is called) 
session_set_cookie_params(86400); 

// Tried all of the above 
?> 

Est-ce que quelqu'un d'autre a eu ce problème? Si oui, est-il possible de prolonger le temps d'inactivité?

Je suis à peu près prêt à faire peler PEAR et à écrire ma propre classe d'authentification basée sur les cookies, mais je n'ai pas vraiment le temps.

Répondre

2

Je n'ai pas rencontré ce problème jusqu'à présent, mais je vois deux raisons possibles que vous ne semblez pas avoir couvert encore:

  1. Vous pouvez vérifier la méthode setExpire() de la classe auth en plus de setIdle ().
  2. Il se peut que d'autres applications/scripts basés sur PHP soient exécutés sur le même serveur, en utilisant le même répertoire de stockage de session avec un délai d'attente inférieur. Selon le session.gc_maxlifetime docs:

    Si différents scripts ont différentes valeurs de session.gc_maxlifetime mais partagent le même endroit pour stocker les données de session le script avec la valeur minimale sera le nettoyage des données. Dans ce cas, utilisez cette directive ainsi session.save_path.

+0

Merci! Je vais essayer et vous faire savoir comment ça se passe. – teaforchris

+0

Essayé setExpire() en plus de setIdle() comme conseillé, mais cela ne semble pas avoir fait de différence. Le serveur étant un serveur cloud, je ne suis pas entièrement sûr de la manière dont les sessions sont stockées - il pourrait bien y avoir des interférences avec d'autres scripts. Pensez-vous que l'utilisation d'un session.save_path différent pour l'application Web en question serait utile? – teaforchris

+0

Oui, vous devriez certainement essayer. Si c'est un serveur cloud, il y a de fortes chances qu'il y ait plus d'applications php en cours d'exécution, donc cela pourrait bien être le coupable. Si le chemin n'est pas spécifié, il est par défaut '/ tmp' sur les serveurs * nix, donc le régler sur quelque chose comme '/ tmp/[votreNomApp]' (ou mieux encore, '/ tmp/[hash de votreNomApp]') pourrait résoudre votre problème (au moins, cela exclurait une autre raison possible;) –