“未定义变量:_SESSION”VS。 “会话已经开始”

Posted

技术标签:

【中文标题】“未定义变量:_SESSION”VS。 “会话已经开始”【英文标题】:"Undefined variable: _SESSION" VS. "A session had already been started" 【发布时间】:2011-05-22 10:23:08 【问题描述】:

嘿。 我有一些 php 脚本。在其中一个中,我有代码 session_start(),当我在另一个脚本中再次有 session_start() 时,我得到了通知:

注意:会话已经开始...

这是合乎逻辑的。但是当我删除它时,我收到错误/通知:

注意:未定义的变量:_SESSION

为什么?我该如何解决?当我在脚本中有两个位置 session_start() 时,脚本可以正常工作(只是得到一点通知),但当我没有两个 session_start() 时,脚本根本不起作用。

是唯一的解决方案

error_reporting(E_ALL ^ E_NOTICE);

在我的脚本中?忽略通知不是不好的做法吗?

编辑:

我的部分代码:

            try 
            //session_start();

            $STH = DB::prepare  (   "UPDATE users SET DJ_name=?, DJ_showname=? WHERE id=?" );
            $STH->execute(array($_POST['DJ_name'], $_POST['DJ_showname'], $_SESSION['userid']));

            pre_dump($_SESSION);

            $_SESSION['DJ_name']        =   $_POST['DJ_name'];
            $_SESSION['DJ_showname']    =   $_POST['DJ_showname'];
        

输出:

注意:未定义变量:第 19 行 D:.....\main.php 中的 _SESSION

注意:未定义变量:第 21 行 D:.....\main.php 中的 _SESSION

pre_dump 代码:

    function pre_dump($var)

    echo '<pre>';
    var_dump($var);
    echo '</pre>';

【问题讨论】:

听起来很奇怪。 $GLOBALS['_SESSION']呢? 你为什么不只保留 1 session_start ? 你使用的是 PHP $GLOBALS['_SESSION'] 不起作用 HoLyVieR:我不知道我还有另一个 session_start。但是当我收到通知时我将其删除,然后是另一个奇怪的错误来了。 【参考方案1】:

我最近也遇到了同样的问题。我无法访问 $_SESSION 变量的内容。

1) 这是在声明session_start(); 之前尝试访问$_SESSION 变量的结果。在我自己的例子中,我已经在header.php 文件中启动了一个会话。但是我在 include 语句之前访问了 $_SESSION 变量。示例;

<?php
 $username = $_SESSION['username'];
 //do some logical operation!!!
?> 
<?php include("header.php");?>

而不是做这样的事情

<?php include("header.php");?>
<?php
 $username = $_SESSION['username'];
 //do some logical operation!!!
?> 

2) 可能导致此问题的另一件事,可能是无法在所有可能需要使用 $_SESSION 变量访问的文件的顶部启动会话

session_start();

希望这对遇到同样问题的人有所帮助。虽然这是在很晚的时候。

【讨论】:

【参考方案2】:

我自己发现了错误。 在我没有注意到的脚本中某处有一个 session_start() 。现在似乎一切正常。

【讨论】:

【参考方案3】:

无论你是否运行 session_start(),$_SESSION 总是存在的。所以我认为一定是其他原因导致了你的错误。

您可以发布代码吗?可能是您在某处取消了变量设置(请参阅this link)。

【讨论】:

如果没有调用session_start(),则不存在(PHP 5.3.3)。【参考方案4】:

在我看来,unset($_SESSION); 被调用了。

【讨论】:

对,这将触发两个警告:session_start(); unset($_SESSION); session_start(); echo $_SESSION;。除了(不太可能的)PHP错误之外,我不知道会发生任何其他方式。 会是这个吗? session_write_close(); 没用。尝试删除 session_write_close();。唯一发生的事情是,我又收到了 5 条关于会话已经开始的通知。 我尝试使用 session_start(); 重新创建我的情况; var_dump($_SESSION);和 session_write_close();在一些新的 php 文件中。但无法重新创建错误/通知。断定这是我的脚本中的错误,而不是 PHP 本身的错误。 如果你删除了session_write_close,你应该不需要再次调用session_start。您只需要记住在完成会话后关闭会话即可。

以上是关于“未定义变量:_SESSION”VS。 “会话已经开始”的主要内容,如果未能解决你的问题,请参考以下文章

已经开始的PHP会话[重复]

IllegalStateException:getAttribute:会话已经失效

PHP中的会话已经开始错误[重复]

PHP会话已经开始[重复]

java.lang.IllegalStateException:getAttribute:会话已经失效

Apple Watch - 另一个启动会话已经在等待调试带有标识符的应用程序扩展