SafariでCookieが保存されないことがあったので書いてみる。
PHPでCookieを発行するにはsetcookieを使ったりしますが内容がいい加減でも有効になる場合とそうでない場合があります。
setcookie("test", "test", time() + 3600, '/', 'http://example.com/')
このsetcookieを実行した場合、Firefox・Chromeでは有効になりますがSafariでは有効にならずCookieが発行されません。
setcookieの第5引数は「domain」と指定されているのでドメイン以外の要素(スキーマやディレクトリ)が入っているとアウトなわけです。
正しくは
setcookie("test", "test", time() + 3600, '/', 'example.com')
となり、これであればFirefox・Chrome・SafariでCookieが発行されます。
PHPの
http://php.net/manual/ja/function.setcookie.phpでもちゃんとそういった説明があるのでこれに従っていれば問題はなかったのですが、なぜかこれに従っていなかったので調べて見たらブラウザで挙動が違っていたと。
ちゃんと関数を理解して丁寧に書き、テストは複数の環境で行うという当たり前のことが抜けていたために起こったアホなバグではあります。
作った人いわくFirefoxとChromeで確認してOKだったので大丈夫と思ったとのこと。
たしかにクライアントの要求がFirefoxとChromeで見れればOKなら大丈夫だったかもしれませんが・・・
ブラウザー