J'ai un site, par exemple example.com
, où les utilisateurs peuvent définir leurs propres sous-domaines (un utilisateur - un sous-domaine) et télécharger leurs propres scripts, par exemple http://somedomain.example.com/xyzzy.php
correspondrait à /www/somedomain/xyzzy.php
Désormais, sur certains de ces domaines, Internet Explorer 7 n'accepte/ne peut pas accepter les cookies. Vérifié avec Fiddler: le serveur envoie correctement la réponse Set-Cookie, mais le cookie n'apparaît jamais dans IE - pour JS ou Developer Tools. Sur demande, IE7 n'envoie pas non plus l'en-tête Cookie.
Les cookies sont définis pour le domaine de l'utilisateur (par exemple somedomain.example.com
), le chemin d'accès est /
, a essayé différentes options d'expiration (passé, futur, actuel, "0"), n'est pas HttpOnly, n'est pas sécurisé.
FF, Opera, Safari et Chrome fonctionnent tous sans problème.
Pourquoi IE ignore-t-il les cookies?
L'un des sous-domaines utilise-t-il un trait de soulignement? IE a des problèmes pour accepter les cookies de sous-domaines qui ne suivent pas le RI RFC .
Selon RFC1035 (Noms de domaine - implémentation et spécification):
Les [noms de domaine] doivent commencer par une lettre, se terminer par une lettre ou un chiffre et avoir comme caractères intérieurs uniquement des lettres, des chiffres et un trait d'union.
Il s'avère que certains des domaines comportaient un trait de soulignement ("_"): some_domain.example.com
. Bien qu'il s'agisse d'une violation de la RFC, tous les autres navigateurs fonctionnent normalement.
MSIE 7, sur un domaine avec un trait de soulignement, supprime silencieusement tous les cookies pour cet hôte et refuse d'en accepter de nouveaux.
La seule solution est d'utiliser des domaines conformes à la RFC (j'ai remplacé tous les "_" par des "-" et mis en place un RewriteRule afin que le trafic soit redirigé vers les domaines conformes).
Le problème ne s'applique pas uniquement aux traits de soulignement dans les noms de domaine, mais également aux noms de domaine commençant par un chiffre numérique. Donc 1aaaaaaa.tld
est en fait un nom de domaine non standard, ce qui entraînera IE à rejeter le cookie.
Je l'ai résolu en utilisant uniquement www2.1aaaaaaa.tld
, puis en ajoutant des règles de réécriture pour le 1aaaaaaa.tld
et www.1aaaaaaa.tld
hôtes dans .htaccess
. Je ne sais pas si cela peut vraiment être considéré comme une solution conforme aux normes ... mais de toute façon, cela semble avoir résolu le problème des cookies.
J'espère que cela aide quelqu'un!