这是带有会话的简单php代码:
<?php
session_start();
function testSession() {
//global $_SESSION;
var_dump($_SESSION['test']);
}
if (!isset($_SESSION['test'])) {
echo " Nope";
$_SESSION['test'] = " Yeap";
} else {
testSession();
}
?>
问题是“$ _SESSION”不是超全球。 “$ _SESSION”在testSession函数范围中未定义,仅在主范围内可见。如果我取消注释“global $ _SESSION”,那么一切都会起作用。
UPD: 错误是“var_dump”行中的“未定义变量:_SESSION”($ _ SESSION ['test']);
UPD: 如果你写这段代码:
<?php
session_start();
if (!isset($_SESSION['test'])) {
echo " Nope";
$_SESSION['test'] = " Yeap";
} else {
var_dump($_SESSION['test']);
}
?>
一切都会正常工作。
答案 0 :(得分:0)
始终将session_start();
放在页面的开头。
尝试使用:
<?php
session_start();
echo "Session test ";
function testSession() {
//global $_SESSION;
var_dump($_SESSION['test']);
}
if (!isset($_SESSION['test'])) {
echo " Nope";
$_SESSION['test'] = " Yeap";
} else {
testSession();
}
?>
- 确保在调用任何会话之前调用
session_start();
。因此,安全的赌注是将其放在页面的开头,紧接在开始<?php
标记之后。还要确保在打开<?php
标记之前没有空格/制表符。- 在
header
重定向后,使用exit();
结束当前脚本(其他人也建议session_write_close();
和session_regenerate_id(true)
,您也可以尝试这些,但我会使用exit();
)。- 确保在您用于测试的浏览器中启用了Cookie。
- 确保
register_globals
已关闭,您可以在php.ini
文件上以及使用phpinfo()
进行检查。有关如何将其关闭的信息,请参阅this。- 确保您没有删除或清空会话。
- 确保
$_SESSION
超全局数组中的密钥不会被覆盖。- 确保您重定向到同一个域。因此,从
www.yourdomain.com
重定向到yourdomain.com
不会使会话向前发送。- 确保您的文件扩展名为
醇>.php
(它会发生!)。