我一直在尝试解决这个问题,这让我疯了。基本上我有美国和加拿大用户的表格。表格底部有一个加拿大用户链接,用户可以将用户引导至can-sesssion.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'],并且在转到该页面后仍然保留了旧值。有没有更好的方法来做到这一点,或者我的代码有什么问题吗?谢谢你的帮助。
答案 0 :(得分:8)
这就是你写的:
if (isset($_SESSION['can'])) {
session_start();
session_start
是读取与用户的PHPSESSID
cookie关联的会话文件并填充$_SESSION
的函数,因此您尝试在数组之前读取任何值。
您需要在之前致电session_start
,检查$_SESSION['can']
是否有值。
您也不需要为了更改值而销毁和创建新会话。
<?php
session_start();
if (isset($_SESSION['can'])) {
$_SESSION['can'] = 2;
} else {
$_SESSION['can'] = 1;
}
header('Location: '. $_SERVER['HTTP_REFERER'] . '');
?>
答案 1 :(得分:1)
试试这个:(仅使用一个 session_start()
)
<?php
session_start();
if (isset($_SESSION['can'])) {
$_SESSION['can'] = 2;
}
else {
$_SESSION['can'] = 1;
}
header('Location: '. $_SERVER['HTTP_REFERER'] . '');
?>
答案 2 :(得分:0)
您可能要添加
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
而不是简单的
session_start();