分配前分配的php会话变量

时间:2014-11-15 23:46:39

标签: php session variable-assignment

我一直遇到php会话变量的问题,所以我把它归结为这个简单的代码:

session_start();
echo "I was: " . $_SESSION['myvar'] . "<br>";
$_SESSION['myvar'] = intval($_GET['pos']);
echo "I am: " . $_SESSION['myvar'] . "<br>";

我传入了查询字符串随机值。我期待&#34;我是&#34;用于打印旧值的语句,然后分配一个新值(来自查询字符串),并回显新值。但是,以下是这两个后续查询的输出:$ _GET [&#39; pos&#39;] = 1和$ _GET [&#39; pos&#39;] = 2.

#Expected output
I was 
I am 1
I was 1
I am 2

#Actual output
I was 1
I am 1
I was 2
I am 2

有关为何发生这种情况的任何想法?

编辑:从评论中我可以看出,我还没有说明我如何使用原始剧本。
1-我想记住用户当前所在的页面。当用户请求新页面(AJAX调用)时,请求通过我的脚本,我更新持有用户当前页面的会话变量,并且我回显一个json_encode字符串,我的javascript更新用户&#39 ;页面。
2-我在这里模拟的是:
第一个请求:用户不在任何页面上,并请求页面1 第二个请求:用户在第1页(我的脚本记住了使用$ _SESSION [&#39; myvar&#39;]模拟的会话变量),并请求第2页。因此,对于下一个请求,我的脚本将知道用户在第2页上,然后打开和打开。
3-我在这里得到的内容:用户没有页面,请求第1页......但我的脚本(出于某种未知原因)认为他已经在第1页。第2页的相同想法。
/>

我假设使用会话变量是要走的路。我错了吗?

感谢您的帮助。

编辑(2):第二天我又尝试了这个,但是这次剧本按照我的预期运作了......不知道发生了什么。

2 个答案:

答案 0 :(得分:0)

尝试使用该代码销毁会话

// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_unset(); session_destroy(); session_write_close(); setcookie(session_name(), '', 0, '/'); session_regenerate_id(true);

header('Location:index.php');
exit();

答案 1 :(得分:0)

会话的生命周期[&#39; myvar&#39;]的值 .ie浏览器已打开。这也许就是你得到如此奇怪结果的原因。