更改SESSION变量值

时间:2011-08-09 15:50:48

标签: php forms session

我一直在尝试解决这个问题,这让我疯了。基本上我有美国和加拿大用户的表格。表格底部有一个加拿大用户链接,用户可以将用户引导至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'],并且在转到该页面后仍然保留了旧值。有没有更好的方法来做到这一点,或者我的代码有什么问题吗?谢谢你的帮助。

3 个答案:

答案 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();