【发布时间】:2014-12-06 13:57:17
【问题描述】:
我阅读了许多关于此的其他主题,但仍然无法弄清楚我的问题是什么。它正在工作,然后我的计算机崩溃了,现在看来它不再记住会话变量了。所以这是我的代码
登录页面,我在其中创建会话(如果用户已通过身份验证)
<?php session_start();
if(!empty($_POST['subject'])) //SPAM
exit;
include "functions.php";
$con=Connection();
$usr = mysqli_fetch_array(mysqli_query($con, "SELECT usrname, usrpw FROM users"));
if(password_verify($_POST['usrname'], $usr[0]) && password_verify($_POST['usrpw'], $usr[1])){
session_regenerate_id(true);
echo "crea session";
$_SESSION['logged'] = hash('sha256', 'L9oT8s5iF3yX1uW');
$_SESSION['remote_ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['year'] = date('Y');
echo "<h12>welcome!<br/><br/>";
echo"<a href='home.php'>Home</a></h12>";
}else{
session_destroy();
echo "<h12wrong data.<br/></br>";
echo"<a href='login1.php'>try again</a></h12>";
}
mysqli_close($con); ?>
<html>
<head>
<title> Login </title>
<link type="text/css" rel="stylesheet" href="css/styles.css" title="Style" media="all" />
</head>
</html>
这些是登录(并创建会话变量)后我的“主页”页面中的第一行代码。其他行是html所以我省略了。
<?php session_start();
if(!isset($_SESSION['logged']) && $_SESSION['logged'] != 1)){
echo "not logged ".$_SESSION['logged'];
exit;
}
?>
登录页面有效(它进入 if stat。因为“创建会话”字符串将被打印),但是一旦我进入主页它就会抛出这个错误:注意:未定义的索引:登录第 2 行(我正在检查会话变量是否为 isset)。 我尝试注释掉除“logged”之外的所有会话变量,但仍然无法解决。
谢谢
编辑: 抱歉,关于括号,我在这里写错了(我用数字 1 更改了我的字符串,但我忘了删除括号)。还是不行。
我试过了,但仍然抛出错误(实际上,在“未记录”之后,回显不会打印任何内容)
if(!isset($_SESSION['logged'])){
echo "not logged ".$_SESSION['logged'];
exit;
}
编辑 2: 我把home.php里的所有代码都删了,改成这样:
<?php session_start();
echo $_SESSION['logged'];
?>
它仍然会告诉我“记录”索引未定义
【问题讨论】:
-
在你的第二个代码框中你有一个
)在 if 语句中(最后)(我也会使用 ||) -
我在这里写错了。不是这样的
-
这意味着您的会话索引未设置!所以你在第一个代码框中的 if 语句不会被输入! (我认为您没有使用您的用户名!所以不要使用
password_verify作为用户名) -
实际上是第一个 if 被输入,因为它打印出回显字符串..看起来它只是没有设置会话变量
-
如果你在设置会话索引之前得到一个输出,但你无法访问它,那就太奇怪了!我几乎认为错误在代码的后面!也许您修改或取消设置此索引?!
标签: php session-variables