Empêcher la session expirée dans la Session PHP pour l'utilisateur inactif
j'ai un problème avec ma demande: ma demande a de nombreux formulaires et a besoin d'environ 1 heure pour finir ce formulaire parce que le formulaire est dynamique (peut ajouter d'autres formulaires). Le problème est que la session de mon serveur web dure 24 minutes. Lorsque l'utilisateur remplit le formulaire, il a passé beaucoup de temps et la session s'est arrêtée parce que le serveur reconnaît que l'utilisateur est inactif. C'est très ennuyeux quand le formulaire a été soumis, la plupart des données ont été perdues et l'utilisateur est retourné à la page de connexion. J'ai essayé de faire ma séance expiré en 10 heures avec ce code:
ini_set('session.gc_maxlifetime', '36000');
mais cela ne fonctionne pas dans mon serveur, est-il possible que mon serveur empêche la fonction ini_set()
?
Alors, que dois-je faire pour résoudre ce problème? Puis-je empêcher le temps d'arrêt de la session de sorte que la session peut être étendue à 10 heures? Ou Puis-je désactiver l'expiration de la session?
Merci
5 réponses
au lieu de régler le temps dans ini à une longueur fixe, rappelez-vous que le temps d'arrêt de la session est réinitialisé lors de la recharge. Donc créer un code ajax qui fait une requête toutes les 5 minutes ou plus à un fichier (image ou smth). De cette façon, le minuteur est réinitialisé toutes les 5 minutes et les utilisateurs peuvent passer une journée à remplir vos formulaires.
voici un exemple pour empêcher la temporisation de session en utilisant un appel Ajax jQuery:
var refreshTime = 600000; // every 10 minutes in milliseconds
window.setInterval( function() {
$.ajax({
cache: false,
type: "GET",
url: "refreshSession.php",
success: function(data) {
}
});
}, refreshTime );
dans la session de rafraîchissement.vous pouvez faire quelque chose comme session_start ()
j'ai eu le même problème dans le passé. Ce que j'ai fait pour contourner cela était de placer ces deux fonctions dans un fichier de configuration qui est inclus dans chaque fichier.
session_set_cookie_params(86400);
ini_set('session.gc_maxlifetime', 86400);
et juste pour la sécurité de mesurer cette ligne dans mon .fichier htaccess
php_value session.gc_maxlifetime 86400
Changer session.gc_maxlifetime l'utilisation de ini_set
devrait fonctionner aussi longtemps que vous changez l'option avant d'appeler session_start
. Ainsi, faire ce qui suit devrait fonctionner:
ini_set('session.gc_maxlifetime', 36000);
session_start();
vous pouvez également changer cette option dans d'autres contextes (voir réponse de ChazUK ).
mais je ne voudrais pas fixer la durée de vie du cookie à une valeur fixe mais faire du cookie de session un vrai cookie de session qui dure jusqu'à ce que la session du navigateur soit terminée (c.-à-d. à la fermeture du navigateur). Vous pouvez le faire en paramétrant session.cookie_lifetime à 0
.
ne considèrent également que le modèle d'expiration de session de PHP est un peu bizarre que le calcul de durée de vie est basé sur la date de la dernière modification des données de session.
la durée d'un cookie de session est définie lorsque vous créez le cookie de session. Si vous utilisez la méthode setcookie, un argument de la méthode est la longueur pour laquelle vous souhaitez que le cookie dure.
s'il vous plaît se référer au manuel de PHP sur la méthode pour plus d'informations: http://php.net/manual/en/function.setcookie.php