我有多个页面需要保护,具体取决于用户权限.我有一个PHP来检查页面加载时当前的会话变量.
正在测试的页面; php代码放在!DOCTYPE上方.此代码用于检查客户中是否已记录.如果没有登录或者没有会话变量设置重定向到错误页面,否则什么都不做并正常加载页面
<?php
if (!isset($_SESSION["username"])){
header("location: error.php");
}
?>
Run Code Online (Sandbox Code Playgroud)
我的会话变量仅在登录后设置,登录后用户被重定向到上面提到的页面:
if (mysqli_num_rows($results6) < 1) { //$results6 is a query to check if the user exits in the users database
$logInMsg = "invalid log in";
} else {
session_start();
$_SESSION["username"] = $uName; //$uName is a user input user name
header("location: pageabove.php");
}
Run Code Online (Sandbox Code Playgroud)
问题是,即使登录后我仍然被重定向到错误页面
那是因为你还没有开始会议.您需要在每个要使用会话的页面上指定会话开始(阅读更多信息session_start()):
<?php
session_start(); // start session
// do check
if (!isset($_SESSION["username"])) {
header("location: error.php");
exit; // prevent further execution, should there be more code that follows
}
Run Code Online (Sandbox Code Playgroud)
这适用于一切.在您的登录页面和所有.你想要利用会话的任何地方,你需要启动它,否则它"在风中迷失".