2012-12-16 82 views
1

我做了一个登录页面。当用户登录到API的请求被发送时。这个API是PHP并检查用户名和密码。当两者都是正确的时候,一个唯一的密钥被发回(这被放置在数据库中供进一步使用:userid和网站需要的其他东西)。 该键后发回它被放置在一个cookie:jQuery:问题cookies Internet Explorer

$.cookie("session", JSON.stringify(result)); 

后设置cookie我的用户发送到一个新页面:

location.href = 'dashboard.htm'; 

在本页面jQuery的检查,如果cookie “会话”存在。如果没有,用户将被发回登录页面。

sessionId = ($.cookie("session") ? JSON.parse($.cookie("session")).SessionId : 0); 
return sessionId; 

这在Chrome中正常工作,但IE浏览器(8/9)有这个问题。我发现,当你到达dashboard.htm会话存在。只要我击中F5,会议就消失了。有时候cookie根本就没有设置!

我似乎无法弄清楚为什么在IE中发生这种情况。有人有任何想法吗?其他的选择/想法来保存这个独特的关键也是受欢迎的。

在此先感谢。

回答

2

可能的想法/可能尝试的事情列表。多年来收集的一些信息!

您还应该100%确定您的Cookie代码没有重置Cookie。我已经做到了,我知道别人有。我们发誓它不是我们的代码,但最终有时它;)

远离你的cookie名称中的特殊字符,如下划线(_)和连字符( - )。 IE不喜欢它们,有时候东西可以工作,而其他时候它不会。

确保将cookie设置为距离很远的过期日期。浏览器使用本地计算机查看cookie是否仍然可用。如果电脑的日期和时间不正确,它可能会导致这样的问题。

请确保您为正确的域名设置了Cookie,我已经看到人们为path.example.com设置了Cookie,然后尝试从bob.example.com访问它们。由于跨域策略,这不起作用。

如果您试图通过JavaScript访问cookie,您应该确保您没有将httponly标志设置为true。这个标志将100%阻止任何cookie被JavaScript访问。

如果您在iframe或frameset中设置cookie,您很可能需要在服务器上使用P3P策略。如果你的计划支持IE,你应该最有可能拥有一个人。欲了解更多信息,请访问http://en.wikipedia.org/wiki/P3P

例.htaccess的设定P3P策略:

<IfModule mod_headers.c> 
    Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"" 
</IfModule> 

一种方式来监控你的饼干,我会建议使用Chrome的检查。在“网络”选项卡下,您可以点击一个请求,它会为您提供更多选项卡,如Cookie选项卡,可让您查看所有Cookie。

+0

感谢您的信息!现在尝试一些东西。 在cookie中放入的结果中不使用特殊字符。然而,放置在cookie中的数据是串化的json ...我删除了它,现在它似乎工作得更好。 我不使用域名。路径总是“/”...这是不好的? 我确实使用iFrames。我正在阅读P3P ......但它有很多文字。所以我会找到更多的点到点信息。至少我知道要寻找什么 Chrome的检查员是不需要的。 Chrome仍然正常工作。这实际上是一个IE问题......对于坏人仍然使用这个:) –

+0

由于您已经确认您使用iframe,我编辑了我的答案以包含使用HTACCESS设置P3P策略的示例。 – PhearOfRayne

+0

谢谢,但我想我会删除的iFrames和使用选项卡(或东西)...我不喜欢他们在我的设计...其他问题:p 仍然摔跤与登录后的cookie ...男人!这开始伤害 –

1

也许史蒂芬给出的答案的一部分,但我已经找到并重写某些功能饼干:

function setCookie(name, value, days) { 
if (days) { 
    var date = new Date(); 
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
    var expires = "; expires=" + date.toGMTString(); 
} 
else var expires = ""; 
document.cookie = name + "=" + value + expires + "; path=/"; 
} 

而获得的饼干:

function getCookie(name) { 
var nameEQ = name + "="; 
var ca = document.cookie.split(';'); 
for (var i = 0; i < ca.length; i++) { 
    var c = ca[i]; 
    while (c.charAt(0) == ' ') c = c.substring(1, c.length); 
    if (c.indexOf(nameEQ) == 0) 
     return c.substring(nameEQ.length, c.length); 
} 
return null; 
} 

这工作好一点我。

作为iFrame的一部分:固定。 Cookies可以再次找到,我将我的ajax调用从json改为jsonp。

加上来自Steven的一些提示,现在在IE中运行良好。即使Chrome得到了什么需要做:)