我阅读了许多其他有关此的主题,但仍然无法弄清楚我的问题是什么。它正在工作,然后我的电脑崩溃了,现在它似乎不再记住会话变量了。所以这是我的代码
登录页面,我在其中创建会话(如果用户已通过身份验证(
<?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 行(我正在检查会话变量是否设置(。我尝试注释掉除"已记录"以外的所有会话变量,但仍然无法解决。
谢谢
编辑:抱歉,关于括号,我只是在这里写了一个错误(我用数字 1 更改了字符串,但我忘记删除括号(。仍然不工作。
我试过这个,但仍然抛出错误(实际上回声在"未记录"后不会打印任何内容(
if(!isset($_SESSION['logged'])){
echo "not logged ".$_SESSION['logged'];
exit;
}
编辑 2 :我删除了家里的所有代码.php并制作成这样:
<?php session_start();
echo $_SESSION['logged'];
?>
它仍然会告诉我"记录"索引未定义
我想,你的意思是if(!isset($_SESSION['logged']( || $_SESSION['logged'] != 1(((第一次检查会话变量是否存在,下一次检查值(
使用 isset 时,我通常以相反的方式进行,以便将来更好地阅读我的逻辑:
让我们刹车一下,这意味着使用的已登录:
isset($_SESSION['logged']) && $_SESSION['logged'] == 1
然后我用 ! 使语句仅在用户未登录时才有效:
!(isset($_SESSION['logged']) && $_SESSION['logged'] == 1)
请记住,您必须添加括号,否则 ! 只会反转 isset,而不是整个内容。
如果您真的想走这条路,以上所有内容,但说实话,最好在您的情况下使用 empty:
if (empty($_SESSION['logged']))
这将检查是否设置了 thingy,然后如果它没有计算为 bool false - 在你的情况下,1 不为空,0 或 '' 为空,所以它会像一个魅力一样工作。
因为如果不存在,则不能与 1 不同,您必须使用 or (||(
<?php session_start();
if(!isset($_SESSION['logged']) || $_SESSION['logged'] != 1){
echo "not logged ".$_SESSION['logged'];
exit;
}
?>
试试这个,它会帮助你:
- 删除额外的
)
- 使用
||
而不是&&
使用适当的条件
if(!isset($_SESSION['logged']) || $_SESSION['logged'] != 1)