49 votes

Safari n'active pas les cookies, mais IE / FF le fait.

J'ai trouvé un étrange problème de cookie sur safari. Si vous surfez sur http://2much.ch vous pouvez entrer avec FF/IE et surfer à l'intérieur du site.

Mais si vous utilisez Safari, vous ne pouvez entrer qu'une seule fois ; vous ne pouvez pas naviguer à l'intérieur du site. J'ai découvert que Safari ne définit pas le cookie saisi, mais que FF/IE le fait.

Qu'est-ce qui ne va pas ?

2 votes

Je n'ai rien à ajouter, si ce n'est que le nom de domaine est le meilleur de tous les temps.

0 votes

Hehe, thx :) Peut-être que je le vendrai :)

0 votes

Peut-être pourriez-vous expliquer un peu la partie relative à l'installation des cookies. Par exemple : est-ce fait par un module complémentaire de Plone ou par un code personnalisé ?

68voto

Martijn Pieters Points 271458

Il semble que vous ayez rencontré un bogue Safari ici ; vous redirigez tout navigateur visiteur vers /entry tout en définissant le cookie, et Safari ignore l'en-tête Set-Cookie lorsqu'il rencontre le statut HTTP 302 :

$ curl -so /dev/null -D - http://4much.schnickschnack.info/
HTTP/1.1 302 Moved Temporarily
Server: nginx/0.7.61
Date: Sun, 19 Jul 2009 12:20:49 GMT
Content-Type: text/html;charset=utf-8
Connection: keep-alive
Content-Length: 14260
Content-Language: de
Expires: Sat, 1 Jan 2000 00:00:00 GMT
Location: http://4much.schnickschnack.info/entry
Set-Cookie: colorstyle="bright"; Path=/; Expires=1248092449.12
Set-Cookie: _ZopeId="73230900A39w5NG7q4g"; Path=/

Techniquement, il s'agirait d'un bogue dans les classes Foundation d'Apple. Bogue de WebKit qui affirme que c'est le cas.

Je suppose que la solution consiste à placer le cookie non pas dans index_html mais dans entry.

Depuis que j'ai répondu à cette question, ce problème semble maintenant résolu, du moins pour Safari 6, lorsque en 2012, quelqu'un a testé tous les principaux navigateurs pour la prise en charge des Set-Cookie sur les redirections 302 .

2 votes

Merci pour cette bonne explication, Martjin ! J'ai mis le code dans le /entry. Cela fonctionne maintenant. MERCI BEAUCOUP !

6voto

Chris Lively Points 59564

Il y a un mois, j'ai rencontré ce problème. J'ai d'abord pensé qu'il s'agissait d'une boîte à biscuits corrompue, car je pouvais nettoyer les biscuits et repartir.

Cependant, il est réapparu. Cette fois, j'ai passé une heure à le parcourir, à regarder ce qui était envoyé, à examiner ce que Safari renvoyait, et j'ai trouvé le problème.

Dans ce cas, j'avais un tableau de valeurs de cookies envoyé au navigateur après la connexion avant la redirection. Les valeurs ressemblaient à 'user id', 'user full name', 'some other id', etc.

(oui, les identifiants sont cryptés, donc pas de soucis)

Mon nom d'utilisateur complet se trouvait en fait dans un <lastname>, <firstname> format.

Lorsque Safari a renvoyé le cookie au serveur, tout ce qui se trouvait après la virgule du nom de famille a été supprimé. Il ne renvoyait que les valeurs jusqu'à ce point.

Lorsque j'ai supprimé la virgule, le reste des valeurs a commencé à fonctionner correctement.

Il semble donc que si vous envoyez une valeur de cookie qui contient une virgule, Safari ne l'échappe pas correctement dans son stockage interne. Ce qui m'amène à penser que s'ils n'échappent pas correctement les virgules, il y a probablement des problèmes de sécurité dans le code de gestion des cookies de Safari.

Par ailleurs, ceci a été testé sur Win 7 x64 avec safari 4.0.5. J'ai également mis en place une page web à l'adresse suivante http://cookietest.livelyconsulting.com/ qui montre exactement ce problème. (J'ai supprimé ce site test)

IE, FF et chrome définissent tous correctement le cookie, ce qui n'est pas le cas de Safari.

5 votes

Chris : votre problème est entièrement lié à l'analyseur. Il est lié à la manière dont CFNetwork regroupe les en-têtes Set-Cookie en un seul en-tête Set-Cookie lors de l'analyse HTTP. En général, les en-têtes Duplicate

4 votes

Je ne sais pas pourquoi quelqu'un voterait négativement sur cette question près d'un an plus tard ; cependant, le comportement est toujours cassé dans Safari 5.0.3.

0 votes

Chris : jetez un coup d'œil au nouveau RFC sur les cookies. C'est "l'avenir". rfc-editor.org/rfc/rfc6265.txt

5voto

Iker Jimenez Points 3351

Il semble que ce problème ne soit plus d'actualité. Voir aussi http://blog.dubbelboer.com/2012/11/25/302-cookie.html

3 votes

Il s'agit manifestement toujours d'un problème dans Safari, voir les commentaires sous l'article ...

3 votes

Non, c'est toujours un problème avec Safari 14 sur Catalina :(

3voto

Dag Høidahl Points 923

Nous avons rencontré un problème très similaire dans lequel Safari (v. 7.0.6) ignorait un cookie. L'en-tête du cookie semblait parfaitement correct, presque identique à celui d'un autre cookie qui était rappelée.

Il s'est avéré que le coupable était le précédent l'en-tête du cookie est malformé expires valeur. La gestion par Safari des en-têtes de cookies brisés n'est manifestement pas aussi robuste que celle des autres navigateurs.

2voto

user104338 Points 11

J'ai rencontré le même problème avec Chrome. Chrome n'ignore pas l'en-tête set-cookie lorsque vous redirigez, mais vous ne savez jamais dans quel ordre (set-cookie en premier ou redirection en premier). Voici ce que j'ai essayé :

J'ai un site web qui supporte l'anglais et le français. Je l'ai implémenté (avec php) de la manière suivante :

localhost a un lien vers localhost/fr (qui met en place un cookie en français et redirige vers localhost). Cela fonctionne. (définir le cookie d'abord)

localhost/path1 a un lien vers localhost/fr?return=/path1 (qui met en place un cookie français et redirige vers localhost/path1). Cela ne fonctionne pas. (redirection d'abord, la langue n'a pas changé)

localhost/path1 a un lien vers localhost/fr?return=www.google.com (qui set-cookie en français et redirige vers google). Quand je suis revenu sur mon site, il est en français. (ce qui signifie que le set-cookie vers le français n'est pas ignoré, mais seulement exécuté après la redirection)

J'espère être clair, l'anglais est une langue étrangère pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X