2 回答
TA贡献2016条经验 获得超9个赞
你不想有这样的事情:
$_SESSION['密码']
纯文本未加密密码是一个严重的问题。您可以在登录时做一些事情,您可以创建一个访问令牌,该令牌是一个随机散列字符串并保存到用户 cookie 中。
下面是一个例子:
function login()
{
$userName = 'billy';
$password = 'foobar';
// get your user data using username and password.
$userObject = new User();
$userId = $userObject->id;
// create our secure hash.
$accessToken = password_hash($password, PASSWORD_DEFAULT);
// update the user in the row.
mysqli_query($link, "UPDATE users set access_token='$accessToken' WHERE id = $userId");
// expires in 1 day, auto logout.
setcookie('userAccessToken', $accessToken, time() + 86400);
}
function getUser() {
return mysqli_query($link, "SELECT * from users WHERE access_token = ".$_COOKIE['userAccessToken']);
}
现在您只需要检查一个属性,即访问令牌,并将其存储在 cookie 中以防它们返回。使用散列方法可以防止任何人嗅探 cookie 并获取私人信息。
为了代码的可维护性,您不想要重复的代码,并且应该始终尝试创建可在所有页面中使用的小型可重用组件。创建一个名为 auth.php 的 PHP 文件,然后在需要它的页面中使用它。
// UserPage.php
require_once __DIR__.'/lib/auth.php';
$user = getUser();
// MessagePage.php
require_once __DIR__.'/lib/auth.php';
$user = getUser();
// lib/auth.php
function getUser() {
return mysqli_query($link, "SELECT * from users WHERE access_token = ".$_COOKIE['userAccessToken']);
}
作为旁注,我建议您查看 laravel.com,而不是用普通的 php 编写您的应用程序并构建您自己的框架。他们有视频教程,该框架解决了开发人员遇到的许多常见问题,包括这个问题。
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报