只有 1 个用户名和 1 个密码才能访问此页面,因此决定将其存储在 PHP 本身中,因为它可能比将其存储在数据库中更安全。但是,我正在尝试掌握会话并希望:
- 它不会以任何方式损害安全性。
- 当其他人尝试登录并失败时,它不会停止会话(对于已登录的用户)脚本的运行。例如,我不希望它删除登录用户的会话。可能是一个愚蠢的问题,但我想我还是会问。
我的index.php
文件,在 php 中如下所示:
session_start();
if (!isset($_SESSION['Admin']))
{
if (isset($_POST['username'], $_POST['password']) && $_POST['username'] == 'someUsername' && $_POST['password'] == 'someVeryStrongPassword')
{
$_SESSION['Admin'] = true;
session_write_close();
}
else {
// You don't have access, go back to login page.
session_destroy();
header("location:login.php");
exit();
}
}
// This will now be used for any subsequent, same page requests, such as: `index.php?action={something}`, etc. but will always use `index.php` as the main page.
// Is it now safe to continue on with code assuming that the user is logged in at this point? Should there be anything else to consider adding? Possibly into the $_SESSION[] array?
我的 login.php 文件实际上只是 HTML,看起来像这样:
<!DOCTYPE html>
<html>
<head>
<title>Administration</title>
</head>
<body>
<form name="login" method="POST" action="index.php">
<label for="user">Username: <input id="user" type="text" name="username" /></label><br />
<label for="pass">Password: <input id="pass" type="password" name="password" /></label><br />
<p><input type="submit" value="Login" /></p>
</form>
</body>
</html>
同样,我计划将$sess_id
变量附加到文件中提交的所有表单,index.php
并对照session_id()
. 这足够安全吗?一直在看session_regenerate_id和session_id。人们报告说,session_regenerate_id
当多个用户登录时会导致问题(旧会话 ID 与新会话 ID)。在我的情况下使用它是否明智session_regenerate_id
(因为我没有将任何数据存储到数据库中)?
更新代码感谢M Miller