更改 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 变量值的主要内容,如果未能解决你的问题,请参考以下文章

更改目标主体内的 Makefile 变量值

如何更改 PHP 中的静态变量值?

在哪里更改 cmake 变量值?

触发更新 ServletContext 中的全局变量值

如何在分配的变量值更改时停止变量更改C#

如何在 javascript 代码中更改 django 模板变量值?