可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”
有正常运行的代码。不得不重新启动服务器,现在它不起作用。
我在“登陆”页面的开头有这个(这是用户在验证密码后访问的页面)
<?PHP session_start(); ?>
<html><head>
<title>Welcome</title>
</head><body>
<?PHP $_SESSION['valid']='TRUE'; ?>
... code and HTML ...
</body></html>
当我做print_r时,我得到了
"Array([valid] => TRUE)"
在我以后的所有页面中,我都有
<?PHP session_start(); ?>
<html>
<head><title>Page Title</title>
</head>
<body>
<?php
/// Kick them out if they try to open this page directly
if ($_SESSION['valid']!='TRUE') {
session_destroy();
die("<b>You must be logged into this application to use it</b>");
?>
... code and html ...
</body></html>
此前工作正常,但现在我得到了:
注意:未定义的索引:在第9行的C:\ inetpub \ wwwroot \ usermanager \ selectuser.php中有效
您必须登录此应用程序才能使用它。
当我在print_r中放入一个调试语句时,我只得到“Array()”作为$ _SESSION的值。
为什么它不再起作用了?!?现在我已经把我的头发撕成了四个小时,试图解决这个问题。 NOTHING在代码中已更改, 正在工作。
答案 0 :(得分:2)
没错。 $_SESSION
确实是您存储的会话变量数组。您的第二个代码不起作用,因为从技术上讲,valid
数组中没有$_SESSION
变量。最好使用:if(!isset($_SESSION['valid']))
代替。
答案 1 :(得分:0)
通知告诉您该索引没有设置,因此Undefined Index
解决此问题的一种方法是在进行比较或从中获取值之前使用isset()
检查变量是否已设置。
if (!isset($_SESSION['valid'])) {
session_destroy();
die("<b>You must be logged into this application to use it</b>");
?>
http://www.php.net/manual/en/function.isset.php
您可能还想检查会话文件夹是否可写(通常是/tmp/
)
if (!is_writable(session_save_path())) {
echo session_save_path().'" is not writable!';
}
答案 2 :(得分:0)
您可以将if
语句更改为:
<?php
if isset($_SESSION['valid']) && $_SESSION['valid'] == 'TRUE' ; ?>
但是为什么你使用字符串'TRUE'来表示php在预定义的布尔值true
中所拥有的东西?
答案 3 :(得分:0)
感谢所有回复的人。事实证明这是会话商店的一个问题。
那里有一大堆垃圾文件。我们在多台虚拟机上安装了我们的Web服务器,并且同一台机器上的其他几台服务器出现了问题。
我们将整个网站移动到一个新的虚拟机,现在它正常运行。
我确实了解了isset()的价值,所以这一天并不是完全浪费。
感谢您的帮助!感恩节快乐
答案 4 :(得分:0)
感谢所有回复的人。事实证明这是会话商店的一个问题。
我查看了路径,这是正确的,但是当我实际去机器上时,它充满了垃圾文件和文件名,其中包含不良字符。我们在同一台整体服务器上的多台虚拟机上运行各种Web服务器,不同区域的其他几台也存在问题。
我们将整个网站移动到一个新的虚拟机,现在它正常运行。
我确实了解了isset()的价值,所以我现在可以不仅向登出的人显示错误,而且还向那些从未登录过的人显示错误,所以这一天没有完全是浪费。
再次感谢您的帮助和感恩节快乐