我试着编写自己的身份验证方法(学校项目),但我被困住了。 请告知,如何解决安全身份验证:
有一个index.php,其中包含需要“保护”的所有内容。我将在这里复制我的代码的相关部分。
更新了index.php
session_start();
function checkUserAuth(){
$authStatus = false;
if (isset($_SESSION['PHPSESSID'])){
if ($_SESSION['PHPSESSID'] == $_COOKIE['PHPSESSID']){
$authStatus = true;
}
}
return $authStatus;
}
if(!checkUserAuth()){
include_once(dirname(__DIR__).'/admin/authentication/login.php');
exit();
}
如果checkUserAuth()确定没有经过适当身份验证的用户,则将包含login.php并停止脚本的其余部分。
更新了login.php:
if(array_key_exists($username, $users) && password_verify($password, $users[$username])){
$_SESSION['PHPSESSID'] = $_COOKIE['PHPSESSID'];
$_SESSION['login_user'] = $_POST['user'];
我想象的可能是,如果登录详细信息正确,login.php会设置一个cookie,并刷新页面。然后index.php将检测cookie,并跳过登录部分。
登录很简单,感谢Juned,我认为它现在正在运行。但是我不知道这有多安全?
从1到非常规,我有多错?
答案 0 :(得分:1)
有很多方法可以做到这一点。下面的伪代码不是最有效的,但应该有效,我不认为你上面所做的事实际上会有效。
这有帮助吗?
login.php伪代码
<?php
session_start(); // this function checks if there's a session ID already set, if not, sets one.
if(array_key_exists($username, $users) && password_verify($password, $users[$username])){
// do your login details checking here
// if login details correct
// set a flag in the $_SESSION superglobal and whatever else you want to store about the user like their username e.g.
$_SESSION["loggedIn"] = true;
$_SESSION["username"] = "$_POST['user']"; // better practice to fetch a clean version from your database
//else return user to login page
}
?>
index.php伪代码
<?php
session_start(); // this will fetch the session ID and other variables that you might have set e.g. username, logged in status
function checkUserAuth(){
$authStatus = false;
if (isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] === true){
$authStatus = true;
}
return $authStatus;
}
if(!checkUserAuth()){
// redirect to login page. e.g.
header('Location: login.php');
exit;
}
?>