tontof / kriss_feed

A simple and smart (or stupid) feed reader
279 stars 52 forks source link

Problème de session ? #428

Closed Nono-m0le closed 5 months ago

Nono-m0le commented 2 years ago

J'ai mis un timeout assez élevé pour pas être déconnecté tous les jours sur mon instance (que je visite depuis plusieurs ordi/téléphone).

plugins$ cat timeout.php
<?php
MyTool::$opts['http']['timeout'] = '10';
plugins$ cat sessions.php
<?php
ini_set("session.gc_maxlifetime", '86400');
ini_set('session.save_path', $_SERVER['DOCUMENT_ROOT'].'/sessions');

Hors, lors de la dernière migration, j'ai 'cleané' mon dossier /sessions/ et depuis, lorsque je me connecte sur mon téléphone, je suis déconnecté tous les jours et le "stay signed in" ne fonctionne pas.

Aurais-tu une solution ?

tontof commented 2 years ago

Tu utilises la version dans le src ? Parce que normalement je pensais avoir réglé ce problème avec la version 8.14 ?

Nono-m0le commented 2 years ago

AH, j'etais en 8.12 je te tiens au jus :D (C'est quoi la diff entre index.php et src/index.php ?)

Nono-m0le commented 2 years ago

Idem en 8.14 :(

tontof commented 2 years ago

Ah zut et ton dossier sessions est bien utilisé (il se remplit de nouveau de fichiers de sessions) ? Je viens de tester de mon côté, je ne l'utilisais pas. Je verrais si je suis déconnecté ou pas.

La différence c'est que le fichier index.php est normalement stable et src/index.php en développement. C'est pour ça que j'attends un peu depuis la version 8.12 je savais qu'il pouvait y avoir quelques soucis, mais je pensais que la 8.14 était bonne, je vais devoir encore attendre un peu pour la remplacer.

Nono-m0le commented 2 years ago

Oui oui +100 fichiers dans le dossier sessions.

Ce qui m'embête c'est que ça n'arrive que sous Firefox mobile sous Android (à jour)

tontof commented 2 years ago

Tu restes connecté sur les autres navigateurs ? Ça vient peut-être juste d'une configuration lié aux cookies ? Est-ce que tu as essayé en cochant l'option de protection de session (pour désactiver certains tests de reconnaissance de sessions) ?

Nono-m0le commented 2 years ago

'cochant l'option de protection de session' c'est dans KF ou Firefox ? Sur le ordis (Linux FF et Windows chrome) , je reste toujours connecté oui, sans timeout ni déco

tontof commented 2 years ago

Dans KF :-)

Bon de mon côté, je n'ai pas vraiment pu tester parce que je détruis les cookies à la fermeture mais si ça marche sur les ordis et pas le téléphone, j'imagine que c'est lié à une configuration sur le navigateur du téléphone. Tu as essayé avec d'autres navigateurs sur le téléphone pour voir si ça ne marche pas que sur Firefox ?

tontof commented 2 years ago

En testant avec les cookies, j'ai pu le faire fonctionner en ajoutant une ligne de config dans le fichier plugins sessions.php :

<?php
ini_set("session.cookie_lifetime", "31536000");
ini_set("session.gc_maxlifetime", '86400');
ini_set('session.save_path', $_SERVER['DOCUMENT_ROOT'].'/sessions');

Je ne sais pas si ton serveur est configuré par défaut avec un cookie_lifetime différent mais moi ça ne marchait pas du tout à cause de ça et là ça semble fonctionner...

Nono-m0le commented 2 years ago

Pas mieux. J'ai remarqué que simplement fermer Firefox mobile et le ré-ouvrir me deconnectais.Du coup, je pense pas que ce soit le timeout mais bien le session. J'ai essayer de supprimer mes identifiants sauvegardé... Quand je les remets, les champs se rempli automatiquement mais le 'stay signed in' n'est jamais coché...  null

Nono-m0le commented 2 years ago

Du mieux dans la 8.15 ? 👀

tontof commented 2 years ago

Je ne pense pas que ça change grand chose, mais pour le coup ça fonctionne très bien chez moi, j'ai testé sur bureau et mobile, aucun soucis. À part une config particulière client / serveur je ne sais pas trop ce que je peux modifier de mon côté.

tontof commented 2 years ago

On m'a signalé un warning php lié au cookie que j'ai corrigé : https://github.com/tontof/kriss_feed/commit/360e4ddceaeb14151ee1e2f899624582eb82887f avec un peu de chance ça corrigera ton problème de session. Tu me diras, c'est la 8.16

tontof commented 2 years ago

Est-ce que ton problème de déconnexion est corrigé avec la nouvelle version ?

Nono-m0le commented 1 year ago

Je viens de tester la 8.19 (depuis 2/3 jours en fait) et c'est toujours le même problème, que sur Firefox Android :(

tontof commented 1 year ago

Salut, pour refaire un peu le point :

Nono-m0le commented 1 year ago

Je viens d'essayer sur vivaldi, fraîchement téléchargé pour l'occasion : idem. Je n'ai pas de problème sur d'autres site. Edit: la protection de session est DÉJÀ désactivé...

Nono-m0le commented 1 year ago

Est-ce possible que mon plugin session et le fait que la protection soit désactivé puisse causer ce souci uniquement sur mobile ?

tontof commented 1 year ago

Techniquement, je ne vois pas trop pourquoi ce comportement se produit uniquement sur mobile. Est-ce que tu aurais la possiblité de me faire un dossier KF pour moi que je fasse des tests ? Dans un premier temps, voir si tu as le même problème à partir d'une version initiale de KF sans plugins, puis avec, etc. Et si c'est le cas, que je teste avec la même nouvelle instance que toi pour approfondir le test.

franck-tomek commented 5 months ago

Depuis quelques jours, je suis déconnecté très souvent, sans avoir a priori changé un quelconque réglage. Enfin si, j'ai coché la case pour désactiver la protection contre le vol de cookie de session, depuis que ça a commencé à se déconnecter, mais ça n'a rien changé. Je consulte toujours sur desktop avec Firefox.

FF 122.0.1 / Kriss 8.19

franck-tomek commented 5 months ago

Bon, en fait je pense que ça vient de Firefox (ou d'un de ses modules) puisque depuis quelques jours, il me déconnecte d'autres sites sans que je lui demande.

tontof commented 5 months ago

Il me semble que Firefox a renforcé sa gestion des cookies, est-ce que ça peut venir de ça ? Je suis encore à la version 115.7.0esr de Firefox et je n'ai pas de soucis particulier. Je n'ai pas eu d'autres retours pour le moment, si tu as d'autres infos/évolutions je suis preneur.

franck-tomek commented 5 months ago

Oui c'est sans doute ça. Je n'ai pas vu passer cette info sur le renforcement de la gestion des cookies, mais ça y ressemble. Je vais investiguer à ce propos.

Nono-m0le commented 5 months ago

J'ai pris l'habitude, mais il me déconnecte plusieurs fois par jour, uniquement sur Firefox mobile (android)

sudwebdesign commented 5 months ago

Salut a tous, En voyant ce fil, cela me fait pensé a un problème de déconnexion lié a un changement d'IP du client.

Cela se produit aussi avec invoiceplane et avec une connexion mobile orange qui bascule d'IPV4 a V6 de temps a autre et aléatoirement. j'ai débusqué cela, alors qu'un ami était chez moi a faire ses factures (sur son mobile, déjà difficile) et je scrutais les logs serveur de mon coté et paf j'ai saisi au vol (parmi les bots) le fait des redirections sur la page de login dû au changement de son Adresse IP (et la haine pour lui car son $_POST perdu). En modifiant un peu la source afin que le cookie n'est aucune référence de l'adresse IP, il reste connecté...

Tester en commentant la ligne. https://github.com/tontof/kriss_feed/blob/master/src/class/Session.php#L112

        $ip.= isset($_SERVER['HTTP_CLIENT_IP']) ? '_'.$_SERVER['HTTP_CLIENT_IP'] : '';

Bon c'est sur c'est moins sécure, mais a priori c'est celle là. ou celle-ci : https://github.com/tontof/kriss_feed/blob/master/src/class/Session.php#L142

                $_SESSION['ip'] = self::_allIPs();

En toute cordialités.

tontof commented 5 months ago

En commentant, ça permettrait effectivement de confirmer ou pas si c'est lié à ça, mais effectivement un changement d'IPV4/6 déconnecte la session. En utilisant l'info du user-agent à la place de l'ip pour garder une "relative" sécurité ?

Pour tester il est possible de remplacer cette ligne dans la fonction _allIps en faisant un return ""; https://github.com/tontof/kriss_feed/blob/master/index.php#L5039 ou par return $_SERVER['HTTP_USER_AGENT']; ?

Merci en tout cas pour l'info !

Nono-m0le commented 5 months ago

Pour ma part, ca ne change rien, cela dit, je peux reproduire le "bug" à l'infini :

sudwebdesign commented 5 months ago

Au cas où, en cherchant $_SESSION parmi ses 9396 lignes, il y à celle-ci https://github.com/tontof/kriss_feed/blob/a154b054cb7f98066016a6b0e4eee9a6c52512a2/index.php#L8640

                // when browser closes
                $_SESSION['longlastingsession'] = 0;

qui était ça

-              Session::setCookie(0);
+             $_SESSION['longlastingsession'] = 0;

ds la dernière MAJ https://github.com/tontof/kriss_feed/commit/a154b054cb7f98066016a6b0e4eee9a6c52512a2#diff-7413d6453f901e939bbd840c8f0d1c7b20c2ca0e7f71741e4e07c6cf036f16c0L8594

-                $_SESSION['expires_on'] =
-                    time() + $_SESSION['longlastingsession'];
-                Session::setCookie($_SESSION['longlastingsession']);

Et celles-ci me semble curieuses https://github.com/tontof/kriss_feed/commit/a154b054cb7f98066016a6b0e4eee9a6c52512a2#diff-7413d6453f901e939bbd840c8f0d1c7b20c2ca0e7f71741e4e07c6cf036f16c0R4989

-        self::setCookie();
+        $lifetime = null;
+        if (!empty($_SESSION['longlastingsession'])) {
+            $lifetime = $_SESSION['longlastingsession'];
+        }
+        self::setCookie($lifetime);

Il semble que les cookies soient gérés d'une autre manière Session::setCookie vers self::SetCookie

ps : dsl je sais pas colorisé ds les commentaires (pensais que les + et - le ferais)

tontof commented 5 months ago

Après réflexion, ça ne peut pas venir de _allIp parce que l'option "désactiver la protection contre le vol de cookie de session" permet de ne pas tester avec _allIp et ça ne marche pas non plus avec cette option.

Normalement il n'y a pas de différence entre Session::setCookie et self::setCookie (la méthode étant statique, utiliser self permet de ne pas dépendre du nom de la classe). Je ne suis pas très fier de cette classe Session, je n'aurais pas fait comme ça maintenant.

Par contre il y a effectivement un truc qui n'est pas bon ! Dans la fonction init, j'utilise $_SESSION avant session_start ce qui n'est pas possible. Je viens de déplacer cette partie, est-ce que vous pouvez tester pour voir si ça change quelque chose ? https://raw.githubusercontent.com/tontof/kriss_feed/master/src/index.php

Nono-m0le commented 5 months ago

Warning: session_set_cookie_params(): Session cookie parameters cannot be changed when a session is active in /var/www/html/rss/index.php on line 5030

Pour ma part...

tontof commented 5 months ago

Arf, merci pour le retour, mais ça explique peut-être bien le problème. Dans la doc php, je suis tombé sur ce commentaire https://www.php.net/manual/en/function.session-set-cookie-params.php#100657 et je vais essayer de modifier pour prendre en compte toutes ces infos. En attendant, si tu commentes la ligne en ajoutant // au début de la ligne 5030 qui appelle la fonction session_set_cookie_params, ça donne quoi ?

Nono-m0le commented 5 months ago

J'ai plus l'erreur, mais fermer Firefox sur mobile me déconnecte toujours.

tontof commented 5 months ago

Nouvelle tentative : https://raw.githubusercontent.com/tontof/kriss_feed/master/src/index.php Je n'ai pas encore pu tester de mon côté, je croise les doigts.

Nono-m0le commented 5 months ago

Deprecated: setcookie(): Passing null to parameter #5 ($domain) of type string is deprecated in /var/www/html/rss/index.php on line 5034

Avec PHP 8.2.7 (cli) (built: Jun 9 2023 19:37:27)

tontof commented 5 months ago

J'ai refait une modif : https://raw.githubusercontent.com/tontof/kriss_feed/master/src/index.php Par contre est-ce que ça ne serait pas lié à ça ton problème, comment cela se fait-il que ton $domain soit null ?

Je pense qu'il va falloir qu'on s'envoit des mails privés pour faire des tests d'affichage des retours serveurs $_SERVER['HTTP_HOST']si ça ne fonctionne pas avec cette dernière modif.

Nono-m0le commented 5 months ago

Je ne vais pas crier victoire trop vite mais je n'ai plus d'erreur, ni de déconnexion en redémarrant firefox mobile...

franck-tomek commented 5 months ago

Bon j'ai mis à jour en 8.22 et j'ai toujours de la déconnexion régulière. Merdoum.

tontof commented 5 months ago

Arf, après comme ce n'est pas spécifique à KrISS feed et que tu sembles avoir le même problème avec d'autres sites, j'imagine que c'est plus lié à ton navigateur, tu as essayé avec un autre navigateur ? Chromium ?

sudwebdesign commented 5 months ago

Ou ordi, téléphone, navigateur vérolé... Chercher mbam android avec votre MDR préféré.

Peut-être tester avec un autre appareil ;)

franck-tomek commented 5 months ago

Bah, j'ai maintenant l'impression qu'il n'y a plus que ce site là qui déconne sur Firefox. J'ai fait un clean de cookies complet. Je veux bien essayer avec un autre navigateur, mais celui que j'utilise au quotidien, c'est Firefox. Peut-être une extension ?

franck-tomek commented 5 months ago

Je viens de tester avec Safari, même problème de déconnexion. Est-ce que ça pourrait venir d'une modif côté serveur ?

sudwebdesign commented 5 months ago

@franck-tomek

Est-ce que ça pourrait venir d'une modif côté serveur ?

Ça peut arriver, pare-feu, watch dog, version de PHP... Teste avec un autre hébergeur (si possible) et si ça fonctionne bien, vérifie les différences entre les 2 résultats donnés avec phpinfo(); Que dit le log serveur (ouvert sur un autre appareil) : a recharger lorsque tu ferme le navigateur et lorsque tu le ré-ouvre. Il y a aussi php.ini a vérifier (et peut-être le .htaccess sur un apache)

tontof commented 5 months ago

Côté serveur, j'ai ajouté un plugin de mon côté avec ceci dedans. C'est juste un fichier sessions.php dans un dossier plugins à côté du fichier index.php

<?php
ini_set("session.cookie_lifetime", "31536000");
ini_set("session.gc_maxlifetime", '86400');
ini_set('session.save_path', $_SERVER['DOCUMENT_ROOT'].'/sessions');

Peut-être en essayant de ne garder que les 2 premières lignes ini_set dans un premier temps pour tester ?

Nono-m0le commented 5 months ago

Pour ma part, j'ai ça (depuis des années ^^):

<?php
ini_set("session.gc_maxlifetime", '86400');
ini_set('session.save_path', $_SERVER['DOCUMENT_ROOT'].'/ses
sions');

Note: plus de problème pour ma part, je surveiller encore un peu le ticket mais risque de le fermer bientôt :D

tontof commented 5 months ago

KrISS feed charge automatiquement les fichiers dans le dossier plugins

tontof commented 5 months ago

@Nono-m0le : bonne nouvelle après une ouverture en août 2021 :-)

franck-tomek commented 5 months ago

Je teste avec le plugin.

franck-tomek commented 5 months ago

A priori, avec la dernière ligne et un répertoire sessions, ça roule.

tontof commented 5 months ago

Bizarre, je ne sais pas pourquoi mais tant mieux si ça marche. Il faudra penser à regarder ton dossier de sessions pour voir s'il ne grossit pas trop en nombre de fichiers. De mon côté je n'ai pas de soucis mais @Nono-m0le semble avoir des fichiers qui ne se suppriment pas tout seul

franck-tomek commented 5 months ago

OK, je surveillerai.