每当我重新加载页面时,仍会设置取消设置 PHP 会话变量 [重复]
Posted
技术标签:
【中文标题】每当我重新加载页面时,仍会设置取消设置 PHP 会话变量 [重复]【英文标题】:Unsetting a PHP session variable is still set whenever i reload the page [duplicate] 【发布时间】:2019-08-03 17:36:25 【问题描述】:我的问题是当我取消设置会话变量然后重新加载 login.php 时,会话变量仍然设置。
这是我想要做的:
我正在尝试通过在 reset.php 中设置的会话变量发送错误消息
<?php
session_start();
$_SESSION['reset-msg'] = "This link has already been used";
header("Location: $urllogin.php");
exit();
?>
Login.php 应该检查是否设置了此会话,然后显示错误消息并取消设置会话变量。
<?php
session_start();
if(isset($_SESSION['reset-msg']) && !empty($_SESSION['reset-msg']))
print_r($_SESSION);//prints "Array ( [reset-msg] => This link has already been used )"
$warn_msg = $_SESSION['reset-msg'];
$_SESSION['reset-msg'] = "";
unset($_SESSION['reset-msg']);
else
$warn_msg = "";
print_r($_SESSION);//prints "Array ( )"
exit;
?>
但是,每次重新加载 login.php 时,我仍然收到相同的消息。
日志文件中显示的唯一错误
PHP 警告:session_start(): 无法发送会话缓存限制器 - 第 2 行 /login.php 中的标头已发送(从 /login.php:1 开始输出)
【问题讨论】:
错误信息表明你在调用session_start()
之前有一些输出。首先移动session_start()
,在任何输出之前(包括换行符/空白等)。
旁注:您不需要在相同的 if 条件下同时使用 isset()
和 !empty()
。只需拥有!empty()
就足够了,因为它检查与isset()
相同的内容以及更多内容。
错误消息表明session_start()
失败,这肯定会导致您尝试设置会话变量时出现问题。从第 1 行开始的输出表明您有一些 之前 <?php
。它可能是一个字节顺序标记
在session_start()
之前删除输出的提示见this answer
如果您仍然遇到同样的错误,那么您的<?php
-tag 之前可能有一个空格或换行符。另外,请确保您的文件保存为 UTF-8 而不是 with BOM
。
【参考方案1】:
使用 session_destroy 或将会话索引定义为空白
【讨论】:
我尝试了 session_destroy 而不是取消设置,但仍然没有破坏会话。但是我在日志“session_destroy(): Trying to destroy uninitialized session”中得到这个错误【参考方案2】:使用以下内容。它会破坏会话
session_start();
session_unset();
session_destroy();
header('location:your-desired-location.php');
【讨论】:
OP 想要取消设置 一个 会话变量,而不是核对整个会话以上是关于每当我重新加载页面时,仍会设置取消设置 PHP 会话变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章