更改 SESSION 变量值
Posted
技术标签:
【中文标题】更改 SESSION 变量值【英文标题】:Change SESSION variable value 【发布时间】:2011-10-23 08:45:58 【问题描述】:我已经尝试解决这个问题一段时间了,这让我发疯了。基本上我有一个美国和加拿大用户的表格。加拿大用户的表单底部有一个链接,将用户引导至 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'],并且在转到该页面后它仍然保留那个旧值。有没有更好的方法来做到这一点,还是我的代码有问题?感谢您的帮助。
【问题讨论】:
您应该知道HTTP_REFERER
不是您可以依赖设置的标题,也不能设置为实际的引用页面。它是可选的,浏览器可以发送它想要的任何内容。
有没有更有用的选项,或者在页面中简单地包含这个 php 会更实用?
您可以将代码放在要更改会话变量的任何位置。您可以根据需要多次更改内容,而无需将任何人转到新页面。
【参考方案1】:
这是你写的:
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'] . '');
?>
【讨论】:
明白了。是的,我只是将会话作为最后的努力而销毁,但显然它不会起作用,因为我没有首先初始化会话。 我正在显示另一个响应首先出现在我这边。不过,我感谢您的快速回复。 这是我的结果:25 分钟前回答 - Neal ----- 27 分钟前回答 - Dan 哇,对不起,老兄,我一分钟都没脑子。修好了。【参考方案2】:试试这个:(仅使用 一个 session_start()
)
<?php
session_start();
if (isset($_SESSION['can']))
$_SESSION['can'] = 2;
else
$_SESSION['can'] = 1;
header('Location: '. $_SERVER['HTTP_REFERER'] . '');
?>
【讨论】:
完美!知道为什么多个 session_start() 会破坏它吗? 他们不是,你只是在错误时间调用它^_^【参考方案3】:你可能想要包含
if (session_status() == PHP_SESSION_NONE)
session_start();
而不仅仅是简单
session_start();
【讨论】:
以上是关于更改 SESSION 变量值的主要内容,如果未能解决你的问题,请参考以下文章