Souhaits #500
ferméRester connectée longtemps (1 mois ... + ?)
100%
Description
Bonjour,
serait-il possible d'avoir une case à cocher sur la page de login de Galette pour la sauvegarde d'un cookie valable un temps certain, voir un certain temps (genre de 1 à 6 mois) pour rester connectée même quand on ferme son navigateur ?
Une case à cocher "se souvenir de moi".
J'aime bien quand un site m'accueille avec sa page de membre connecté plutôt que la page de login même quand je ne suis pas venue quelques jours (et surtout si je dois y venir chaque jour, j'aime bien me sentir accueillie :) )
Mis à jour par Mélissa Djebel il y a presque 12 ans
Ah!
J'ai le wish #500 tout rond.
Ça me permet de faire un vœu ou j'ai droit à un cadeau ? ;-)
Mis à jour par Johan Cwiklinski il y a presque 12 ans
Si j'étais toi, je miserai d'avantage sur le voeu :D
Oui, c'est vrai que de rester connecté dépend actuellement de la longueur de session par défaut sur le serveur ; et ud navigateur utilisé (firefox ne ferme pas les sessions ; lorsqu'il est rouvert, je me retrouve de nouveau connecté ; je n'ai docn pas ton problème :p).
Cela étant dit, je ne sais pas si un cookie est la meilleure des solutions ; il faudrait que je me penche un peu sur la question pour voir les différents possibilités.
Mis à jour par Johan Cwiklinski il y a presque 12 ans
Ptètre qu'un simple truc de ce genre là ferait l'affaire :
$session_expires = new DateTime()->add(new DateInterval('P1M');
session_set_cookie_params(strtotime($session_expires->format('d-m-Y')) - time());
À placer avant le session_start()
dans galette/includes/galette.inc.php
.
(je n'ai pas testé ce code)
Mis à jour par richard kevin il y a presque 12 ans
Bonjour,
je travail sur cette tache j'ai tester le code mais il fonctionne pas . svp vous pouvez m'aider un peut plus par rapport à cette tache merci
Mis à jour par Mélissa Djebel il y a presque 12 ans
J'utilise aussi firefox et la méthode de rallongement de la session n'a pas donné de résultat chez moi.
Ce que je propose :
- Fichier lib\Galette\Core\Login.php, dans la fonction
logIn($user, $passe)
, dans la partie authentification réussie, au même endroit queAnalog::log('User `' . $user . '` logged in.', Analog::INFO);
Ajouter :\setcookie(PREFIX_DB . NAME_DB . '_login', $user . '$' . $passe, time() + 60 * 60 * 24 * 30);
- Dans la fonction
logOut()
du fichier lib\Galette\Core\Authentication.php, ajouter :
\setcookie(PREFIX_DB . NAME_DB . '_login'); unset($_COOKIE[PREFIX_DB . NAME_DB . '_login']);
- Enfin dans index.php, juste après le
if (isset($_GET['logout'])) {...}
, ajouter :
if (array_key_exists(PREFIX_DB . NAME_DB . '_login', $_COOKIE)) { list($user, $pwd) = split('$', $_COOKIE[PREFIX_DB . NAME_DB . '_login']); if (strlen($user) > 0 && strlen($pwd)) { $login->logIn($user, $pwd); if ($login->isLogged()) { $session['login'] = serialize($login); /** FIXME: users should no try to go to admin interface */ if ($login->isAdmin() || $login->isStaff()) { if (!isset($_COOKIE['show_galette_dashboard']) || $_COOKIE['show_galette_dashboard'] == 1 ) { header('location: desktop.php'); die(); } else { header('location: gestion_adherents.php'); die(); } } else { header('location: voir_adherent.php'); die(); } } } }
Testé avec IE, ça marche comme attendu (et y'a pas de raison que ça marche pas avec les autres). Par contre, pas sur que l'admin reste connecté, mais bon, c'est moins grave ^^
Ca duplique un peu le code dans index.php et c'est un peu moche, y'a moyen d'améliorer je pense, par exemple en sortant les $_POST['login'] du if pour récupérer la valeur cookie si elle existe.
Mis à jour par Johan Cwiklinski il y a presque 12 ans
Mélissa Djebel a écrit :
\setcookie(PREFIX_DB . NAME_DB . '_login', $user . '$' . $passe, time() + 60 * 60 * 24 * 30);
Une remarque : utiliser le mot de passe (sous quelque forme que ce soit) dans un cookie, c'est hors de question... Je ne suis pas très chaud pour le login non plus.
Il y a déjà un cookie, pour la session, qui ne contient pas ce type d'informations ; pas vraiment la peine d'en créer un autre (moins il y en a à gérer, mieux c'est). Cette solution implique par ailleurs un passage obligatoire sur index.php
, entrainant de multiples requêtes HTTP pour pas grand chose finalement.
Bref, ça ne me semble pas vraiment une bonne idée.
Je n'ai toujours pas eu le temps de tester quoi que ce soit de mon côté (et je ne l'aurai pas avant un moment) ; mais la fonction session_set_cookie_params
et son corolaire session_get_cookie_params
sont censées faire le boulot ; à condition que le serveur le permette (je n'ai aucune idée de qui le permet ou pas) bien évidemment (cf. http://www.php.net/manual/fr/session.configuration.php#ini.session.cookie-lifetime).
La valeur par défaut, 0
, rend le cookie de session caduque lorsque le navigateur est fermé ; Firefox étant un cas particulier car si on ré-ouvre les onglets précédemment ouverts, la session est conservée (ça ne vaut pas si les onglets ne sont pas récupérés à l'ouverture). Ceci bien évidemment avec une configuration de base côté serveur, et un session.cookie_lifetime
à 0
.
Est-ce que dans vos tentatives, l'appel à session_set_cookie_params
a bien été effectué avant le session_start
? Est-ce qu'une erreur est renvoyée dans les logs système ?
Mis à jour par Mélissa Djebel il y a presque 12 ans
En effet, il suffit j'ai bien l'impression de faire simplement :
session_set_cookie_params(60 * 60 * 24 * 30); //we start a php session session_start();
J'avais mal lu la définition de session_set_cookie_params. Elle demande un temps absolu en paramètre, pas la date à laquelle la session va échoir. Elle fait le calcul seule. Et c'est bon, finit. Ça marche comme attendu.
Éventuellement, mettre un define("DAYS_SESSION", 30);
dans config.inc.php pour laisser à l'administrateur du site la possibilité de choisir sa durée de session (0 = à la fermeture du navigateur, sinon en nombre de jours)
session_set_cookie_params(60 * 60 * 24 * DAYS_SESSION);
Mis à jour par Johan Cwiklinski il y a presque 12 ans
Mélissa Djebel a écrit :
J'avais mal lu la définition de session_set_cookie_params. Elle demande un temps absolu en paramètre, pas la date à laquelle la session va échoir. Elle fait le calcul seule. Et c'est bon, finit. Ça marche comme attendu.
Cool, super :)
Éventuellement, mettre un
define("DAYS_SESSION", 30);
dans config.inc.php pour laisser à l'administrateur du site la possibilité de choisir sa durée de session (0 = à la fermeture du navigateur, sinon en nombre de jours)
Ouais, un paramètre quelque part (mais pas dans le config.inc.php
qui est actuellement écrasé à chaque mise à jour ;)).
Mis à jour par boh waz il y a presque 12 ans
ca ne marchera que pour les serveurs qui n'ont ni debian ni ubuntu, cf les commentaires de la doc php de set cookie params.
Mis à jour par Johan Cwiklinski il y a presque 12 ans
boh waz a écrit :
ca ne marchera que pour les serveurs qui n'ont ni debian ni ubuntu, cf les commentaires de la doc php de set cookie params.
C'est très juste, merci de la précision :)
Au vu du peu de travail impliqué au final par la demande ; j'ajouterai ce paramètre dans un coin en précisant les limitations connues. En gros : pour ceux pour qui ça marche, tant mieux (enfin, tant que ça ne cause pas de bogues ; je ne crois pas que ce soit le cas) :p
Mis à jour par Johan Cwiklinski il y a plus de 7 ans
- Statut changé de Nouveau à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit 55720519e3960aa84de5de92fd7180a06569ea58.
Mis à jour par Johan Cwiklinski il y a plus de 7 ans
- Catégorie mis à Core
- Statut changé de Résolu à Fermé
- Assigné à mis à Johan Cwiklinski
- Version cible mis à 0.9
Possible en 0.9 en définissant la constante GALETTE_TIMEOUT
via le fichier config/behavior.inc.php
:)