Php 我收到通知:使用会话时未定义索引:loggedin
成功验证用户身份后,如果用户尚未注册培训,则会将其重定向到register.php 如果用户已经注册了培训,则会将其重定向到register.php以查看/修改其培训课程 到目前为止,这一切都很好 问题是,如果用户试图直接进入register.php或register.php,他/她会在未登录的情况下进入任何网页 这是我试图阻止的,但我一直收到以下错误消息:Php 我收到通知:使用会话时未定义索引:loggedin,php,session,Php,Session,成功验证用户身份后,如果用户尚未注册培训,则会将其重定向到register.php 如果用户已经注册了培训,则会将其重定向到register.php以查看/修改其培训课程 到目前为止,这一切都很好 问题是,如果用户试图直接进入register.php或register.php,他/她会在未登录的情况下进入任何网页 这是我试图阻止的,但我一直收到以下错误消息: Notice: Undefined index: loggedin in .... on line 3 Please log in fi
Notice: Undefined index: loggedin in .... on line 3
Please log in first to see this page
这是我目前正在使用的,谢谢你的帮助
//login.php
$user = trim($_POST['user']);
$pass = trim($_POST['pass']);
// hash to sanitize the input further
$pass = md5($pass);
$tSQL = "SELECT u.empl_first, u.username FROM users u inner join Training t on u.Employee_Id = t.Employee_ID WHERE USERNAME = ?
and PASSWORD = ? ";
$params = array($user, $pass, $params);
$sqll = sqlsrv_query($con, $tSQL);
if ($objResult = sqlsrv_fetch_array($sqll, SQLSRV_FETCH_ASSOC)) {
$firstname = $objResult["empl_first"];
$_SESSION["firstname"] = $objResult["empl_first"];
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $user;
header('location:registered.php');
}
else
header("location:register.php?user='".ms_escape_string($user)."'&pass='".ms_escape_string($pass)."' ");
sqlsrv_close($con);
?>
//register.php
<?php
session_start();
if (!isset($_SESSION['loggedin']) && $_SESSION['loggedin'] != true) {
echo "Please log in first to see this page";
}
login.php上的
具有会话启动()代码>顶部的某个位置
在使用会话的每个脚本上都必须有它。有两个错误:-
在login.php
中,使用session_start()启动会话脚本顶部的code>,以便在$\u会话
中设置变量的代码可以工作
在register.php
中,将IF语句从
if (!isset($_SESSION['loggedin']) && $_SESSION['loggedin'] != true)
到
那么IF将不会测试$\u会话['loggedin']!=如果if的第一部分发现变量不存在,则为true,即!isset($\u SESSION['loggedin'])
如果(!isset($\u SESSION['loggedin'])和&$\u SESSION['loggedin']!=true)
,请仔细查看这行代码。。。。然后修复它,以删除登录页上的未定义索引错误
,并启动会话。@riggsfully,这就是好代码。不过,我还是犯了同样的错误。顺便说一句:是的,我有session_start();在页面的最顶端。理解错误的原因是弄清这一点的关键。再次感谢你,你的意思是你仍然得到未定义的索引错误?如果是,错误发生在哪一行?您确定它仍然是您在register.php
@riggsfully中显示的行吗?我必须关闭浏览器并重新打开它,而不是刷新它。在这样做之后,现在发生了两件事。首先,错误消失了——感谢上帝。然而,当我成功登录时,我仍然会看到我的自定义消息,上面写着“请先登录以查看此页面”。如果您成功登录,则该消息不应出现。另一个问题是,当我试图直接进入该页面而不登录时,它仍然允许我在页面顶部显示相同的自定义消息。你有没有想过为什么会发生这种情况。非常感谢你现在的帮助。我的$\u会话['loggedin']线路错误。非常感谢你的帮助
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] != true)