为了账号安全,请及时绑定邮箱和手机立即绑定

各大网站如何检查用户身份?

各大网站如何检查用户身份?

PHP
BIG阳 2021-11-26 19:34:48
作为标题,我问这个问题是因为我知道如何检查用户是否登录的唯一方法是在每个文件的顶部设置一个会话和一个对数据库的查询以比较会话值。我有类似这个函数的东西,然后我在每个 php 文件的顶部调用这个函数,这很好用。但是我不认为像 facebook、youtube 等大网站有这种方法,这也意味着我的所有文件都必须是.php我不能拥有的,.html因为我将无法运行下面的功能。public function isSessionValid(){    session_start();    $dbConfig = new dbconfig("users");    $dbUser = $dbConfig->getDbUser();    $getUser = new GetUser($dbUser);    $result = $getUser->getUser($_SESSION['UN'],$_SESSION['PW'] );    if(!count($result) > 0){        header("Location: ../index.html");    }}我的问题是检查用户凭据的其他有效方法是什么?
查看完整描述

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 编写您的应用程序并构建您自己的框架。他们有视频教程,该框架解决了开发人员遇到的许多常见问题,包括这个问题。


查看完整回答
反对 回复 2021-11-26
?
阿晨1998

TA贡献2037条经验 获得超6个赞

一种解决方案是将网络服务器配置为首先自动路由所有请求isSessionValid(),然后到达它们的实际目的地。


查看完整回答
反对 回复 2021-11-26
  • 2 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信