Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery:internet explorer的问题_Jquery_Internet Explorer_Cookies - Fatal编程技术网

jQuery:internet explorer的问题

jQuery:internet explorer的问题,jquery,internet-explorer,cookies,Jquery,Internet Explorer,Cookies,我已经做了一个登录页面。当用户登录时,将发送对API的请求。此API是PHP,用于检查用户名和密码。当两者都正确时,将发送回一个唯一的密钥(该密钥被放置在数据库中以供进一步使用:userid和网站中需要的其他内容)。 将该密钥发送回后,将其放入cookie中: $.cookie("session", JSON.stringify(result)); 设置cookie后,我会将用户发送到新页面: location.href = 'dashboard.htm'; 在此页面中,jQuery检查co

我已经做了一个登录页面。当用户登录时,将发送对API的请求。此API是PHP,用于检查用户名和密码。当两者都正确时,将发送回一个唯一的密钥(该密钥被放置在数据库中以供进一步使用:userid和网站中需要的其他内容)。 将该密钥发送回后,将其放入cookie中:

$.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,会话就结束了。有时候饼干根本就没有做好

我似乎不明白为什么IE会出现这种情况。有人知道吗?还欢迎其他保存该唯一密钥的选项/想法


提前感谢。

可能的想法/您可能尝试的事项列表。这些年来收集的一些信息

您还应该100%确保您的cookie代码没有重置cookie。我已经做到了,我知道其他人也做到了。我们发誓这不是我们的准则,但最终有时确实如此;)

远离cookie名称中的特殊字符,如下划线(_)和连字符(-)。IE不喜欢它们,有时东西管用,有时不管用

确保将cookie设置为一个非常遥远的过期日期。浏览器使用计算机本地时间查看cookie是否仍然可用。如果计算机的日期和时间不正确,可能会导致类似的问题

确保您将cookies设置为正确的域名,我见过有人将cookies设置为path.example.com,然后尝试从bob.example.com访问它们。由于跨域策略,这将不起作用

如果您试图通过Javascript访问cookie,您应该确保没有将httponly标志设置为true。此标志将100%防止Javascript访问任何cookie

如果您的设置Cookie位于iframe或frameset中,您很可能需要服务器上的P3P策略。如果您计划支持IE,您最有可能拥有一个。有关更多信息,请访问

设置P3P策略的HTACCESS示例:

<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>

标题集P3P“policyref=\”/w3c/P3P.xml\”,CP=\“IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT”

为了监控cookie,我建议使用Chrome的inspector。在“网络”选项卡下,您可以单击一个请求,它将为您提供更多选项卡,如Cookie选项卡,您可以查看所有Cookie。

可能是Steven给出的答案的一部分,但我发现并重写了一些Cookie功能:

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;
}
函数getCookie(名称){ 变量nameEQ=name+“=”; var ca=document.cookie.split(“;”); 对于(变量i=0;i 这对我来说稍微好一点

作为带有iFrame的零件:固定。可以再次找到Cookies,我将ajax调用从json更改为jsonp


再加上Steven的一些提示,现在IE中的所有功能都很好。即使Chrome也能完成需要完成的工作:)

谢谢您提供的信息!现在就开始尝试。在放入cookie的结果中不使用特殊字符。但是,放在cookie中的数据是字符串化的json。。。我把它去掉了,现在看起来效果更好了。我不使用域名。路径总是“/”。。。这不好吗?我确实使用iframe。我在读P3P。。。但是它有很多文本。因此,我将查找更多有关要点的信息。至少我知道该找什么,因为不需要铬的检查员。Chrome仍然可以正常工作。这真的是一个IE问题。。。对于坏人,仍然使用此选项:)由于您已确认使用iFrame,我编辑了我的答案,以包含一个使用HTACCESS设置P3P策略的示例。谢谢,但我想我将删除iFrame并使用选项卡(或其他东西)。。。我不喜欢他们在我的设计。。。其他问题:p在登录后仍在与cookie搏斗。。。伙计!这开始对我造成伤害,rails gem为我解决了iframe cookie P3P问题