修改SESSION变量值


Change SESSION variable value

我想弄清楚这个问题已经有一段时间了,但它让我发疯了。基本上,我有一个美国和加拿大用户的表单。表单底部有一个针对加拿大用户的链接,该链接将用户引导到can- session .php,其中包含:

<?php
if (isset($_SESSION['can'])) {
    session_start();
    session_destroy();
    session_unset();
    session_start();
    $_SESSION['can'] = 2;
}
else {
    session_start();
    $_SESSION['can'] = 1;
}
header('Location: '. $_SERVER['HTTP_REFERER'] . '');
?>

基本上,如果他们点击链接,它设置$_SESSION['can'] = 1。现在有另一个选项,如果他们点击那个链接,它会把他们带回到这个页面,会话应该被销毁,并设置一个新的值(这就是它应该做的)。问题是,我已经打印出$_SESSION['can'],并且在进入该页面后它仍然保留旧值。是否有更好的方法来做到这一点,或者我的代码有什么问题?谢谢你的帮助。

这是你写的:

if (isset($_SESSION['can'])) {
    session_start();

session_start是读取与用户的PHPSESSID cookie关联的会话文件并填充$_SESSION的函数,因此您试图在数组有任何值之前从数组中读取。

您需要在检查$_SESSION['can']是否有值之前调用session_start

你也不需要销毁和创建一个新的会话只是为了改变一个值。

<?php
session_start();
if (isset($_SESSION['can'])) {
    $_SESSION['can'] = 2;
} else {
    $_SESSION['can'] = 1;
}
header('Location: '. $_SERVER['HTTP_REFERER'] . '');
?>

试试这个:(只使用一个 session_start())

<?php
session_start();
if (isset($_SESSION['can'])) {
    $_SESSION['can'] = 2;
}
else {
    $_SESSION['can'] = 1;
}
header('Location: '. $_SERVER['HTTP_REFERER'] . '');
?>

您可能想要包含

if (session_status() == PHP_SESSION_NONE) {
  session_start();
}

而不是简单的

session_start();