新的会话cookie直到下一个服务器请求才提供

new Session cookie not served up until next server request

本文关键字:请求 服务器 下一个 会话 cookie      更新时间:2023-09-26

嗨,伙计们,所以我正在Codeignator中开发一个应用程序。基于三个选择标签来更新内容。首先是一个城市,它填充该城市的位置选择标签,同时使类别选择标签可见。已经成功设置了一堆ajax调用。内容根据ajax调用进行更新。现在我点击内容链接来查看内容。成功但当我点击浏览器的返回按钮时,我会把选择标签搞砸。所以我意识到我需要一个会话变量,这样当用户点击浏览器的后退按钮时,我可以让他处于相同的选择标记阶段。我暂时能够成功存储会话比方说城市。然后我用

$(document).ready(function () {
            $city="<?php echo $this->session->userdata('city'); ?>";
            alert($city);
        });

检查是否一切正常。现在的问题是洛杉矶(LA):1伦敦:2

场景1:我选择LA,然后查看加载的内容,点击查看内容,然后点击浏览器的返回按钮,然后得到空白警报框。但如果我重新加载,我会收到中1的警报

场景1之后的场景2:我选择洛杉矶,然后选择伦敦查看内容,然后返回,在警报框中看到1。我重新加载我在alertbox中看到的页面2所以我深入研究了这个链接,找到了问题的原因。。。看起来刷新的会话只在下一个服务器请求中提供。正如你所看到的我的问题,我想要刷新的信息,这样我就可以让我的用户保持在他们停止的状态。

关于如何解决这个问题,有什么建议吗?

这就是cookie的工作方式。随客户端的请求一起发送。

解决方法是手动设置$_COOKIE变量:

setcookie('yourcookie', 'something', time()+3600, '/', 'http://example.com', false, true);
$_COOKIE['yourcookie'] = 'something';
// yay I can now access it right away
echo $_COOKIE['yourcookie'];

更新

现在我想我误解了你的问题。在使用浏览器后退按钮时,您似乎遇到了问题?这是正确的吗?如果是这样,您将始终获得页面的先前状态,并且cookie确实不会被设置(因为它将从浏览器缓存中检索它)。我认为唯一可行的方法是通过一些脚本(即JS)刷新页面,但这会很烦人。或者通过对服务器的AJAX调用(新请求)来检索cookie值。