我想弄清楚这个问题已经有一段时间了,但它让我发疯了。基本上,我有一个美国和加拿大用户的表单。表单底部有一个针对加拿大用户的链接,该链接将用户引导到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();