我在http://extjs.domain1.com和http://domain2.com上的服务器端Laravel应用程序上有一个EXTJS应用程序。
我注意到某些浏览器(如Safari或旧IE)默认设置了非常严格的Cookie隐私设置。最后,如果浏览器不接受cookie,则无法保存我的laravel_session cookie,用户无法登录。
我的想法是,只有在当前浏览器中无法保存cookie时,才能为用户显示正确的信息。所以,在我的ExtJS的应用程序启动时,在它初始化之后,我向服务器发送一个自定义的Ajax GET请求(从domain1.com到domain2.com),服务器返回一个包含示例cookie的Set-Cookie头。 如果保存了cookie,则意味着浏览器的设置正常(如果我错了,请纠正我)。
现在,我的cookie名称是Time。 萤火虫中的ajax响应如下:
HTTP/1.1 200 OK
Date: Wed, 03 Feb 2016 12:19:32 GMT
Server: Apache
Set-Cookie: Time=1454511121; expires=Wed, 03-Feb-2016 14:54:11 GMT; Max-Age=9279; path=/; laravel_session=LONG---SESSION---KEY; expires=Wed, 03-Feb-2016 14:19:32 GMT; Max-Age=7200; path=/; httponly
Cache-Control: no-cache
Access-Control-Allow-Origin: http://extjs.domain1.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Origin, Content-Type
Access-Control-Allow-Credentials: true
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
我尝试过很多种组合。 <每次
console.log(document.cookie)
返回一个空字符串。
“时间”Cookie在firebug中可见&gt;饼干,它不是httponly。
“时间”的“过期”大于我当前的浏览器/计算机日期。
我尝试将Cookie的“路径”设置为“/”或空字符串。
我尝试将Cookie的“域名”设置为“.domain1.com”,“extjs.domain1.com”。
我做错了什么? document.cookie总是空的,但firefox告诉我有一个非httponly cookie。
我注意到铬有点不同。 响应Set-Cookie如下所示:
Set-Cookie:Time=1454511121; expires=Wed, 03-Feb-2016 14:54:11 GMT; Max-Age=7715; path=/;
Set-Cookie:laravel_session=LONG---SESSION---KEY; expires=Wed, 03-Feb-2016 14:45:36 GMT; Max-Age=7200; path=/; httponly
有两个Set-Cookie标头,但我读到它应该不是问题。
在Chrome中,我可以在开发工具中看到Cookie&gt;网络标签&gt; xhr请求&gt; Cookies标签。我在Dev工具中看不到cookie&gt;资源&gt;饼干&gt; extjs.domain1.com