未设置时的php会话变量问题

Posted

技术标签:

【中文标题】未设置时的php会话变量问题【英文标题】:php session variable problem when unset 【发布时间】:2011-11-21 19:15:23 【问题描述】:

我已经创建了一个函数来设置会话变量 $_SESSION['flash'] 以便在页面之间存储消息

function setFlash($string,$type="info") 

    switch ($type) 
        case "warning":
            $_SESSION['flashtype'] = "warning";
            break;
        case "error":
            $_SESSION['flashtype'] = "error";
            break;
        case "info":
            $_SESSION['flashtype'] = "info";
            break;
        default:
            $_SESSION['flashtype'] = "info";
            break;
    
    $_SESSION['flash'] = $string;   

以及打印此消息的函数

function printFlash() 
      echo $_SESSION['flash'];
      unset($_SESSION['flash']);


我在每个页面的顶部调用这个函数(当然是在 session_start 之后)

问题是它什么也不打印,但如果我评论“unset($_SESSION['flash']);”它在每一页打印消息。

我该如何解决?


解决了我的错。

my page is something like this

include "func.inc.php"
session start

function editSomething 
  that call setFlash()
  

include "template.php" (where printFlash() is called)

现在我将 printFlash 直接放在我的页面中并且可以正常工作..bah 奇怪...我的错误是什么?

【问题讨论】:

你能展示你的页面流程吗? 好吧...我的课程包含一些文件 => session_start() => printFlash()....然后我调用了一个在数据库中编辑记录的函数和if ok => setFlash("Flash Message") => 重定向到包含相同类的另一个页面 => session_start() => printFlash ....问题是似乎 unset 语句在 echo 语句之前完成 【参考方案1】:

在每一页上都发生了这样的事情:

进行会话 显示闪光灯 删除闪存 用价值创造'flash'

你必须在显示之前移动创建。

(它也不是很有用,因为你不传输'flash'(它在创建后立即删除)

【讨论】:

打印'flash'但在biginning是空的|未设置闪光灯 |设置'闪光' | => 重定向到新页面 |打印闪存 |取消闪光 | 所以看起来是对的,因为我们没有代码可以使用,可能的错误是:下一页没有 session_start(); -- 会话在下一页之前被销毁 第二页顶部有 session_start,如果我从“printFlash”功能中删除“未设置”,第二页打印消息

以上是关于未设置时的php会话变量问题的主要内容,如果未能解决你的问题,请参考以下文章

PhP 5.4 中的 PhP 上传进度不起作用。未设置会话变量

PHP 会话数据未保存

未设置会话变量会停止执行

会话变量未在函数中设置

PHP 会话未设置

如何在取消设置变量后修复会话未启动