htaccess errordocument me fait perdre ID de session

WRInaute passionné
Bonjour,

Je découvre aujourd'hui un problème : en effet dans une page html, il y a un appel à une URL interne dans une balise image.
Quand le fichier image n'existe pas sur mon serveur, je perd l'ID de session. l'utilisateur est obligé de se reconnecter, etc ...

j'ai galéré à trouver la source du problème que voici.
J'utilise dans mon fichier htaccess la directive Errordocument 404 /404.html qui est appelé lors de la source inexistante de ma balise IMG
il s'avère que cette directive fait perdre l'ID de session

Est ce une comportement normal ? si oui comment garder l'ID de session ?

je ne trouve rien à ce sujet sur les forums.

d'avance merci
 
WRInaute accro
Non ce n'est pas normal du tout, sinon on pourrait déconnecter facilement les gens.
T'as pas un truc qui détruit la session dans 404.html ? L'ID de session est dans un cookie ?
 
WRInaute passionné
T'as pas un truc qui détruit la session dans 404.html ?
quand j'enleve le Errordocument 404 de mon htaccess et que j'appelle la page 404.html, ç fonctionne bien, je garde toutes mes infos de session

ça vient de la directive Errordocument qui ne garde pas le même protocole/domaine j'ai l'impression

en complément j'utilise cette instruction en début de programme :
session_set_cookie_params(0,"/",www.mondomaine.com,FALSE);
et celles-ci en début de mon htaccess :
php_flag session.use_only_cookies off
php_flag session.use_cookies on
 
WRInaute passionné
Petit résumé de mes test de ce weekend
je rappelle que je stocke l'ID de session dans les cookies (pour éviter les paramètres dans l'URL)

Errordocument 404 /404.html je perds la session

Errordocument 404 http://www.mondomaine.com/404.html je ne perds pas la session
Errordocument 404 https://www.mondomaine.com/404.html je ne perds pas la session
Errordocument 404 http://mondomaine.com/404.html je ne perds pas la session
Errordocument 404 https://mondomaine.com/404.html je ne perds pas la session

dans la suite de mon htacess j'ai les directives habituelles pour la migration https et autre évitement de duplicate content : c'est à dire :
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,QSA,L]
puis
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ / [QSA,R=301,L]
puis
RewriteCond %{HTTP_HOST} !^www\.mondomaine\.com [NC]
RewriteRule (.*) https://www.mondomaine.com/$1 [QSA,R=301,L]

j'en conclue que Errordocument à un comportement particulier, mais je ne trouve aucune information là dessus
 
WRInaute passionné
en complément, lorsque je fais Errordocument 404 /404.html j'ai directement un 404

mais quand je mets un chemin absolu, j'ai d'abord un 302 vers ma page 404.html puis un 404 (que je code dans ma page 404.html) donc cette solution ne me convient pas
 
WRInaute passionné
lorsque il y a un appel à une page inexistante, il y a génération d'un nouveau ID de session

la directive Errordocument ne transmet pas les cookies (?)
 
WRInaute passionné
oui mon 404.html redirige (rewriterule) bien vers un programme php qui reprend excactement (sous programme commun à toutes mes pages) la même gestion gestion des cookies et variable de session ainsi que le session_start
 
WRInaute passionné
Tests complémentaires
si j'appelle directement la page 404.html (qui est redirigé vers un pgm php) je ne perds pas la session

si dans mon errordocument j'appelle une page html existante je ne perds pas la session

lors de l'appel à Errordocument 404 /404.html il doit y avoir quelque chose qui inhibe mon session_start ou un truc comme ça mais je galère à trouver
 
WRInaute accro
Étonnant que de surcharger le session handler ne t'ai pas aidé ?
Peut-être les directives expires/etag ou autre.

Edit: ah mais j'ai ton URL dans les MPs, on vois bien que le sessid change sur une 404.
 
Dernière édition:
WRInaute accro
1° accès sur la home:
set-cookie: PHPSESSID=9vlh51h5dq6l9e2v8o9adip9jh; path=/; domain=www.example.com

Accès à une URL 404:
https://www.example.com/rezrezrezrezrez
=> pas de set-cookie PHPSESSID, par contre set-cookie: idliste

Accès à une image 404:
https://www.example.com/rezrezrezrezrez.jpg
set-cookie: PHPSESSID=ja4q0fki7812hiua07p0amrkpm; path=/; domain=www.example.com

ID a changé

Qqun qui a eu le même problème que toi: https://drupal.stackexchange.com/qu...g-changed-when-loading-images-that-dont-exist
Ici aussi : https://allinthehead.com/retro/359/how-a-missing-favicon-broke-my-app-for-chrome-users

Mais toi apparemment tu n'as pas Varnish. Mais c'est surement le même genre de pb.
 
WRInaute passionné
BINGO !

j'ai effectivement mis en place le cookiesless pour tous les fichiers statiques dont les fichiers images (j'avais publié)

l'exemple type d'un problème à la c.. sur lequel on perd beaucoup de temps

merci @spout de m'avoir aider à la réflexion


pour résoudre mon problème, je vais tester l'existence des fichiers images en question car je souhaite conserver le Errordocument tel quel ainsi que les cookiesless
 
WRInaute passionné
Pour finir, j'ai pris la décision de supprimer le Cookieless pour les fichiers images
En effet j'ai eu plus d'embetement que de gain (n'utilisant que 3 petits cookies)

et je préviens les futurs problèmes de ce type
 
Discussions similaires
Haut