我已经开始开发这个非常简单的 PHP 登录,它要求输入密码才能访问网站。它还会创建一个 cookie,以允许在用户关闭浏览器窗口之前继续访问。
在每个页面的顶部,我检查 cookie:
<?php
if(!isset($_COOKIE['authorised']) || ($_COOKIE['authorised'] != 'true'))
{
include('login.php'); exit;
}
?>
如果他们不这样做,我将退出并显示登录表单:
<?php
function pageURL()
{
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on")
{
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80")
{
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
}
else
{
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
$pageRedirect = pageURL();
if(isset($_POST['password']) && ($_POST['password'] == 'qwe123'))
{
setcookie('authorised', 'true'); header("Location:$pageRedirect",303);
}
else
{
include('noaccess.php'); exit;
}
?>
<form action="<?php echo pageURL(); ?>" method="post">
<input type="password" name="password" />
<input type="submit" title="I agree" value="I agree" name="submit" />
</form>
当前的 PHP 来自一个旧的警告页面,当你必须同意访问该站点时,我想修改它以使用一个简单的表单,这样如果用户输入密码,例如“qwe123”,那么他们创建cookie,然后被重定向回页面,但现在由于 cookie 而可以访问。如果他们弄错了,则会包含并退出另一个页面。
有人可以帮我解决这个问题吗?谢谢
最佳答案
请不要尝试在客户端 cookie 中存储诸如“已验证”之类的内容;那是非常不安全的。用户可以修改 cookie 中的任何内容——所以在这种情况下,我可以在浏览器设置中查找 cookie,然后编辑它以将“已验证”设置为 true。然后我将登录,无需用户名或密码。
看看PHP's session management职能。您应该创建一个 session 并存储任何安全信息服务器端,而不是客户端。
使用 session 的示例如下;
<?php
session_start();
$secretpassword = 'qwert1234';
$secretusername = 'foobar';
if ($_SESSION['authenticated'] == true) {
// Go somewhere secure
header('Location: secure.php');
} else {
$error = null;
if (!empty($_POST)) {
$username = empty($_POST['username']) ? null : $_POST['username'];
$password = empty($_POST['password']) ? null : $_POST['password'];
if ($username == $secretusername && $password == $secretpassword) {
$_SESSION['authenticated'] = true;
// Redirect to your secure location
header('Location: secure.php');
return;
} else {
$error = 'Incorrect username or password';
}
}
// Create a login form or something
echo $error;
?>
<form action="login.php"><input type="text" name="username" /><input type="text" name="password" /><input type="submit" value="login" /></form>
<?php
}
这是一个非常丑陋的例子,但这涵盖了它的内容
- 如果用户已经登录,则执行安全操作(当然,secure.php 脚本还应验证用户是否已登录)
- 如果用户没有登录,但他们已经提交了表单,检查他们的详细信息
- 如果用户名/密码不正确,设置错误信息
- 如果用户名/密码正确,将它们发送到安全的地方
- 显示错误信息,如果设置了
- 显示一个登录表单
在发送任何其他输出之前运行 session_start();这在客户端存储一个 session cookie,它只在客户端存储一个标识号。所有其他数据都存储在服务器端,因此用户无法修改。
您可以设置几个参数来提高安全性,包括 httponly(防止通过 javascript 访问 cookie,有助于抵御 XSS 攻击)和 secure(仅通过 SSL 传输 cookie)。如果可能,应启用这些。
关于php - 使用 cookie 的简单 PHP 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329806/