新的会话cookie在下次服务器请求之前未提供

时间:2012-08-26 12:59:50

标签: javascript ajax codeigniter session cookies

嗨,大家好,所以我正在开发Codeignitor中的应用程序。内容根据三个选择标签进行更新。填充地点的第一个城市为该城市选择标记,同时使类别选择标记可见。 已经成功设置了一堆ajax调用。根据ajax调用更新内容。现在我点击内容链接查看内容。成功...但是当我点击浏览器的后退按钮时,我会搞砸选择标签。 所以我意识到我需要一个会话变量,以便当用户点击浏览器的按钮时,我可以让他保持在同一个选择标签阶段。我能够成功存储会话让我们暂时说出来。

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

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

方案1: 我选择LA然后查看加载内容点击查看内容然后点击浏览器按钮然后获得空白警告框。但是,如果我重新加载,那么我会收到 1 的警告

方案1之后的方案2: 我选择洛杉矶然后伦敦视图内容然后回来,我在警告框中看到 1 。我重新加载页面,我在alertbox中看到 2 所以我挖掘了这个link并找到了问题的原因......看起来刷新的会话只在下一个服务器请求上提供。你可以看到我的问题,我想要刷新的信息,以便我可以让我的用户保持在他们离开的相同状态。

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:0)

这就是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值到服务器。