“未定义变量:_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。 “会话已经开始”的主要内容,如果未能解决你的问题,请参考以下文章
IllegalStateException:getAttribute:会话已经失效