J'ai un problème étrange dans mon système de gestion des tests en ligne.
Certains utilisateurs du formulaire de test (test.php) ont besoin de beaucoup de temps pour répondre à la question et soumettre le formulaire.
Après avoir soumis le formulaire, la session est expirée et l'utilisateur doit se reconnecter
ce n'est pas un problème de code
Je mets cette valeur en haut de toutes les pages
ini_set('session.gc_maxlifetime', 18000);
Existe-t-il un moyen de rafraîchir la session evrey 10 minutes sans recharger la page sous forme de test pour empêcher l'expiration de la session?
Aidez-moi, s'il vous plaît
Merci
Vous pouvez utiliser javascript XHR, ou comme d'autres l'appellent, AJAX.
En utilisant ajax, vous pouvez appeler un script php qui rafraîchit votre session toutes les 10 minutes. :)
C'est aussi loin que je peux aller à "exact".
javascript
var refreshSn = function ()
{
var time = 600000; // 10 mins
setTimeout(
function ()
{
$.ajax({
url: 'refresh_session.php',
cache: false,
complete: function () {refreshSn();}
});
},
time
);
};
// Call in page
refreshSn()
refresh_session.php
<?php
session_start();
// store session data
if (isset($_SESSION['id']))
$_SESSION['id'] = $_SESSION['id']; // or if you have any algo.
?>
Quoi qu'il en soit, une autre solution serait d'étendre le temps de session pour la page de test uniquement en utilisant la solution présentée ici
Tout ce dont vous avez besoin est le suivant (utilise jQuery pour $ .post):
JavaScript (mettez ceci dans votre fonction onload ou quelque chose)
setInterval(function(){$.post('path/to/refresh_session.php');},600000); //refreshes the session every 10 minutes
refresh_session.php
<?php
session_start();
if (isset($_SESSION['token'])) { //if you have more session-vars that are needed for login, also check if they are set and refresh them as well
$_SESSION['token'] = $_SESSION['token'];
}
?>
(Je sais que c'est à peu près la même que la réponse acceptée, je voulais vraiment commenter celle-ci mais je n'ai pas encore assez de réputation.
Le plus gros changement est dans le JavaScript, vous n'avez pas besoin d'une fonction entière, juste une ligne.)
INFORMATIONS SUPPLÉMENTAIRES:
Bien que je pense qu'il suffit d'appeler session_start()
dans le php, si je lis bien ( http://nl3.php.net/function.session-start ):
Le rappel de lecture récupérera toutes les données de session existantes (stockées dans un format sérialisé spécial) et sera non sérialisé et utilisé pour remplir automatiquement la superglobal $ _SESSION lorsque le rappel de lecture ramènera les données de session enregistrées à PHP = gestion de session.
Et pendant les tests, je ne mets que le code ci-dessus sur ma page visiteur, et non sur la page d'administration. Mais j'avais les deux pages ouvertes dans le même navigateur (Chrome), et la page d'administration est également restée connectée, au moins pendant plus d'une heure (ne vérifie plus). MAIS, je ne sais pas si cela fonctionne toujours si vous utilisez uniquement session_start()
, sans actualiser manuellement aucune session-var du tout ..
Quoi qu'il en soit, j'aime être sûr que les variables de session dont j'ai besoin sont toujours là :)