PHP-检查用户是否登录的脚本未按预期工作
PHP-Script to check if user is logged in not working as expected
问题
我正在为 Web 系统的管理员构建一个面板。我必须确保黑客,如果他们知道此服务器上文件的名称,则至少在不登录的情况下无法直接访问某些页面。
现在,在查看用于实现此目的的类似 php 代码后,我发现在您从数据库验证用户的存在后,您 启动一个会话 然后存储一个 boolean
变量,指示该用户是否以 true
身份登录 $_SESSION["loggedin"]
。
我在我的 login.php
文件中正是这样做的,并且还包括一个条件结构来检查用户是否在我的 admin_upload.php
文件之上登录。它检查 $_SESSION["loggedin"]
.
的值
如我所料
我预计每当我输入 url 直接访问服务器上的 admin_upload.php
文件而不登录时,它会带我到 login.php
开始一个会话,然后我可以查看该页面,而是打开页面,其中包含应该从会话空的登录中获取的值。
代码
login.php文件贴在下方
<?php
$conn=mysqli_connect("localhost","root","","rating");
if(!$conn){
echo "Connection to database was unsuccesful";
}
$username="";
$password="";
$username=trim($_GET["p"]);
$password=trim($_GET["q"]);
//echo $password;
$sql="SELECT username from Admin where username="."'".$username."'";
//echo $sql;
$result=mysqli_query($conn,$sql);
if(mysqli_num_rows($result)>0){
$pass="SELECT Password FROM Admin WHERE username="."'".$username."'";
$real_qry=mysqli_query($conn,$pass);
if(mysqli_num_rows($real_qry)>0){
$row=mysqli_fetch_row($real_qry);
$pass=$row[0];
//echo $password;
if(password_verify($password, $pass)){
//start session
session_start();
//store the admn name in a session
$_SESSION["username"]=$username;
$_SESSION["loggedin"]=true;
echo "password verification passed";
}else{
echo "Incorrect password";
}
}
}else{
echo "No account with that username was found";
}
?>
admin_upload.php贴在下方
<?php
session_start();
//initiaize the session
//check if the user is logged in
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] !== true){
//redirect to welcome.php if false
header("location: login.php");
exit;
}
//session_start();
$name=$_SESSION["username"];
//if he is loged in then display images to be added
include "layout/product_add.php";
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css"/>
</head>
<body>
</html>
非常感谢任何有助于检查用户是否登录并相应地重定向的帮助,谢谢。
您要更新
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] !== true){
与
if(!isset($_SESSION["loggedin"]) || !$_SESSION["loggedin"]) {
验证 $_SESSION["loggedin"]
没有设置或者它的设置不是 TRUE 然后它会做你的重定向
问题
我正在为 Web 系统的管理员构建一个面板。我必须确保黑客,如果他们知道此服务器上文件的名称,则至少在不登录的情况下无法直接访问某些页面。
现在,在查看用于实现此目的的类似 php 代码后,我发现在您从数据库验证用户的存在后,您 启动一个会话 然后存储一个 boolean
变量,指示该用户是否以 true
身份登录 $_SESSION["loggedin"]
。
我在我的 login.php
文件中正是这样做的,并且还包括一个条件结构来检查用户是否在我的 admin_upload.php
文件之上登录。它检查 $_SESSION["loggedin"]
.
如我所料
我预计每当我输入 url 直接访问服务器上的 admin_upload.php
文件而不登录时,它会带我到 login.php
开始一个会话,然后我可以查看该页面,而是打开页面,其中包含应该从会话空的登录中获取的值。
代码
login.php文件贴在下方
<?php
$conn=mysqli_connect("localhost","root","","rating");
if(!$conn){
echo "Connection to database was unsuccesful";
}
$username="";
$password="";
$username=trim($_GET["p"]);
$password=trim($_GET["q"]);
//echo $password;
$sql="SELECT username from Admin where username="."'".$username."'";
//echo $sql;
$result=mysqli_query($conn,$sql);
if(mysqli_num_rows($result)>0){
$pass="SELECT Password FROM Admin WHERE username="."'".$username."'";
$real_qry=mysqli_query($conn,$pass);
if(mysqli_num_rows($real_qry)>0){
$row=mysqli_fetch_row($real_qry);
$pass=$row[0];
//echo $password;
if(password_verify($password, $pass)){
//start session
session_start();
//store the admn name in a session
$_SESSION["username"]=$username;
$_SESSION["loggedin"]=true;
echo "password verification passed";
}else{
echo "Incorrect password";
}
}
}else{
echo "No account with that username was found";
}
?>
admin_upload.php贴在下方
<?php
session_start();
//initiaize the session
//check if the user is logged in
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] !== true){
//redirect to welcome.php if false
header("location: login.php");
exit;
}
//session_start();
$name=$_SESSION["username"];
//if he is loged in then display images to be added
include "layout/product_add.php";
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css"/>
</head>
<body>
</html>
非常感谢任何有助于检查用户是否登录并相应地重定向的帮助,谢谢。
您要更新
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] !== true){
与
if(!isset($_SESSION["loggedin"]) || !$_SESSION["loggedin"]) {
验证 $_SESSION["loggedin"]
没有设置或者它的设置不是 TRUE 然后它会做你的重定向