【问题标题】:php session variable assigned before assignment分配前分配的php会话变量
【发布时间】:2015-01-13 03:37:46
【问题描述】:

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

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

我传入了查询字符串随机值。我希望“I was”语句打印旧值,然后分配一个新值(来自查询字符串),并回显新值。但是,这是我对这两个后续查询的输出:$_GET['pos'] = 1 和 $_GET['pos'] = 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

你知道为什么会这样吗?

编辑:从 cmets 中,我可以看出我还没有明确说明如何使用我的原始脚本。
1-我想记住用户当前在哪个页面上。当用户请求一个新页面(AJAX 调用)时,该请求通过我的脚本,我更新保存用户当前页面的会话变量,并回显一个 json_encode 字符串,我的 javascript 从中更新用户页面。
2- 我在这里模拟的是:
第一次请求:用户不在任何页面,请求第1页。
第二个请求:用户在第 1 页(我的脚本使用此处使用 $_SESSION['myvar'] 模拟的会话变量记住),并请求第 2 页。因此,对于下一个请求,我的脚本将知道用户在第 2 页,然后继续。
3- 我在这里得到什么:用户不在页面上,请求第 1 页...但我的脚本(出于某种未知原因)认为他已经在第 1 页上。第 2 页的想法相同。

我认为使用会话变量是可行的方法。我错了吗?

感谢您的帮助。

EDIT(2):我第二天又试了一次,但这次脚本按我预期的那样工作......虽然不知道发生了什么。

【问题讨论】:

  • 您确定每次进行测试时都在清除 cookie?
  • 您的 html 看起来如何?并且您为此输出调用了脚本 2 次?另请注意,如果您在每次会话仍然存在时进行测试!你必须清除它!

标签: php session variable-assignment


【解决方案1】:

尝试使用该代码来销毁会话

// 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();

【讨论】:

    【解决方案2】:

    SESSION['myvar'] 的值在会话的生命周期内设置。即浏览器处于打开状态。这可能是您得到如此奇怪结果的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 2016-09-22
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      相关资源
      最近更新 更多