web-dev-qa-db-fra.com

Comment redémarrer Apache sans redéfinir les sessions des utilisateurs?

L'utilisateur est connecté à PHP site Web> Je redémarre Apache> L'utilisateur doit se reconnecter.

Comment empêcher cela? (Je ne veux pas que l'utilisateur ait besoin de se connecter à nouveau)

8
dowik

Le stockage d'un jeton de session dans un autre emplacement en tant que sauvegarde éviterait ce problème. Vous pouvez toujours conserver vos informations principales dans $_SESSION, mais conserver un jeton de sauvegarde dans:

  • Biscuits
  • Enregistrements de base de données
  • Stockage local HTML5

Vous pouvez trouver de l’aide dans cette question de StackOverflow: bonne pratique pour les délais de session et la connexion persistante en php .

6
Jacob Hume

Vos données de session ne doivent pas être perdues simplement parce qu'Apache est arrêté ou redémarré, sauf si les données de la session sont stockées en mémoire et non sauvegardées sur le disque (par le système de fichiers ou la base de données). Sinon, vous pourriez redémarrer tout le serveur et la session persisterait. Les données de session sont conçues pour être stockées à long terme. La seule fois où la session est perdue est si:

  1. Le SID est perdu. Les données de session existent toujours côté serveur, mais le client ne peut pas récupérer le SID et ne peut donc pas relancer la même session. Cela peut se produire si le cookie SID expire (s'il s'agit d'un cookie) ou si les liens de session sont perdus (si le SID est un paramètre d'URL) ou si le SID est non défini côté serveur ou modifié sans que le client en soit averti.

  2. Les données de session sont supprimées côté serveur. Cela se produit généralement lorsque le PHP Session Garbage Collector est exécuté et voit que le fichier de session est plus ancien que session.gc_maxlifetime (ce qui correspond à 24 minutes par défaut). Sinon, cela peut arriver si l'application explicitement supprime la session . Sur certains serveurs, l'administrateur peut également avoir configuré une tâche cron pour nettoyer régulièrement les anciennes données de session.

3
Lèse majesté

Rendu possible en utilisant le bon argument avec Apache:

Apache2ctl -k graceful

Apache va redémarrer sans perdre les sessions en cours.

1
dowik