关于js的cookie问题

ffvsnn520 发布于 2014/05/04 19:53
阅读 187
收藏 2

请各位大牛帮帮忙.关于ci框架中的cookie.

我通过js调用获取到了json返回的数据.获取cookie的时候都是正常的.但是会有丢失的情况.域什么都设置了的 。和删除一样.明明js可以获取到cookie.但是php获取就出了问题.跳转的时候有些时候就会丢失掉.不清楚是什么原因.查了资料也没发现问题.

还有一个就是.cookie第一次是获取不到的.但是我在导航那里用到了cookie.所以要刷新cookie才会出来.想请问一下有没有什么好的解决方法?主要是用来判断

以下是问题补充:

@ffvsnn520:您好.这里是两个方法.js设置和删除cookie的方法.function setCookie(cookie_name, cookie_value, cookie_expire){ var cookie_name = cookie_name; var cookie_date = new Date(); var cookie_expire = cookie_expire ? cookie_expire : 0; cookie_date.setTime(cookie_date.getTime() + cookie_expire); document.cookie = cookie_name + "=" + escape(cookie_value) + ";expires=" + cookie_date.toGMTString()+";path=/"; } function delCookie(name,cookie_expire){//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间 var cookie_name = cookie_name; var cookie_date = new Date(); var cookie_expire = cookie_expire ? cookie_expire : 0; cookie_date.setTime(cookie_date.getTime() - cookie_expire); document.cookie = cookie_name+"=;expires=" + cookie_date.toGMTString()+";path=/"; //document.cookie = name+="=; expires=" + date.toGMTString(); } 我用的是php$_COOKIE获取的.问题就在这里出来了.通过js获取的json返回值设置和删除的结果是正常的.例如登录来说是完全正常的.但是当用php在页面判断$_COOKIE出现问题.例如ci框架为例. 默认为welcome/index. 还有xxx/index方法. 在调用公共头部文件时,用php获取js的cookie,就发现了$_cookie会丢失.至少第一次不会出现.刷新后出现. 然后我点击退出登录,删除js的$_cookie.又发现php获取的又删除不了.很不明白.所以想请您帮助 (2014/05/05 09:30)
加载中
0
红薯说愿闻其翔
红薯说愿闻其翔
第一次获取不到用js自动刷新一次,请叫我红领巾
f
ffvsnn520
导航是公共的.这样子不是每个页面都会自动刷新了吗
0
leo108
leo108

cookie是谁设置的?php还是js?

如果是php设置的,第一次获取不到是正常的,因为cookie要先到用户浏览器,然后用户再次访问,这个cookie才会被服务端收到

0
Tuesday
Tuesday

这是典型的底层细节问题, 我依php来讲解。
setcookie函数运行后,j是会返回bool值, 告诉你已经设置成功, 但cookie本身是放置在文件中的, 可以理解为, 它这时还不能写入文件, 因为php线程还没有结束。只有当线程结束时, 文件操作才会完全成功。

那难道每次都要刷新一下?

事实上, php只是忘记了做一件事, 即把当前的设置项直接注入进超全局数组$_COOKIE里面, 所以, 既然php忘记了做, 那我们可在setcooki之后, 把对应的值赋给$_COOKIE, 这样后续的代码均按平时怎么操作cookie通过即可。

希望对你有所帮助, 码字太多, 节日快乐。

上帝与你同在。


0
f
ffvsnn520

引用来自“Tuesday”的评论

这是典型的底层细节问题, 我依php来讲解。
setcookie函数运行后,j是会返回bool值, 告诉你已经设置成功, 但cookie本身是放置在文件中的, 可以理解为, 它这时还不能写入文件, 因为php线程还没有结束。只有当线程结束时, 文件操作才会完全成功。

那难道每次都要刷新一下?

事实上, php只是忘记了做一件事, 即把当前的设置项直接注入进超全局数组$_COOKIE里面, 所以, 既然php忘记了做, 那我们可在setcooki之后, 把对应的值赋给$_COOKIE, 这样后续的代码均按平时怎么操作cookie通过即可。

希望对你有所帮助, 码字太多, 节日快乐。

上帝与你同在。


您好.这里是两个方法.js设置和删除cookie的方法.function setCookie(cookie_name, cookie_value, cookie_expire){
        var cookie_name = cookie_name;
        var cookie_date = new Date();
        var cookie_expire = cookie_expire ? cookie_expire : 0;
        cookie_date.setTime(cookie_date.getTime() + cookie_expire);
        document.cookie = cookie_name + "=" + escape(cookie_value)
                + ";expires=" + cookie_date.toGMTString()+";path=/";    
}
function delCookie(name,cookie_expire){//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间
    var cookie_name = cookie_name;
    var cookie_date = new Date();
    var cookie_expire = cookie_expire ? cookie_expire : 0;
    cookie_date.setTime(cookie_date.getTime() - cookie_expire);
    document.cookie = cookie_name+"=;expires=" + cookie_date.toGMTString()+";path=/";
    //document.cookie = name+="=; expires=" + date.toGMTString();
}
我用的是php$_COOKIE获取的.问题就在这里出来了.通过js获取的json返回值设置和删除的结果是正常的.例如登录来说是完全正常的.但是当用php在页面判断$_COOKIE出现问题.例如ci框架为例.
默认为welcome/index. 还有xxx/index方法.  在调用公共头部文件时,用php获取js的cookie,就发现了$_cookie会丢失.至少第一次不会出现.刷新后出现. 然后我点击退出登录,删除js的$_cookie.又发现php获取的又删除不了.很不明白.所以想请您帮助
返回顶部
顶部