PHP检查用户是否可以访问页面的简单方法

标签 php session

用例:

网站的某些区域仅限成员(member)使用,如果用户已登录则显示页面,否则重定向至登录/注册表格。

我的逻辑

我在 Users() 类中创建了一个方法,它只检查是否设置了 $_SESSION['userID']

逻辑是,如果 $_SESSION[] 未设置,则用户未登录,因为 $_SESSION['userID'] 变量设置为登录。我想出了以下...

方法

public static function isLogged(){
    if(!isset($_SESSION['userID'])){
        header(':Location: login.php');
        die();
    }
}

考虑到以上,我只是在页面的开头添加了isLogged()方法,如果$_SESSION('userID')超全局不是设置用户被重定向。

我的问题/问题

上面的问题是我无法安心休息,因为:

  1. 该方法似乎效率低下...即是否有更好(更有效的方法)?
  2. 我不确定未经授权的用户是否可以执行任何变通方法来查看该页面
  3. 我可能在 isLogged() 方法中遗漏了一些关键信息?

附加信息

登录方式

public function login_user($newEmail, $newPword)
{
    global $db;
    $this->email = $newEmail;
    $this->password = $newPword;
    $sql = "SELECT * FROM bru_users WHERE email = :email AND password = :pword";
    $stmnt = $db->prepare($sql);
    $stmnt->bindValue(':email', $newEmail);
    $stmnt->bindValue(':pword', $newPword);
    $stmnt->execute();
    $is_registered = $stmnt->rowCount();
    if ($is_registered > 0) {
        $users = $stmnt->fetchAll();
        foreach ($users as $user) {
            $userInfo[] = array('userID' => $user['userID'], 'email' => $user['email'], 'userName' =>$user['userName'], 'firstname' => $user['firstname'],
                'lastname' => $user['lastname'], 'reg_date' => $user['registration_date']);
        }
        if(isset($userInfo)){
            foreach ($userInfo as $start) {
               $_SESSION['userID'] = $start['userID'];
               $_SESSION['email'] = $start['email'];
               $_SESSION['userName'] =$start['userName'];
               $_SESSION['firstname'] = $start['firstname'];
               $_SESSION['lastname'] = $start['lastname'];
            }
        }
    } else {
        return false;
    }
    return true;
}

如果更有经验的编码人员可以快速浏览一下,将不胜感激。非常感谢

最佳答案

  1. The method seems inefficient...i.e there is a better (more efficient way of doing this)?

不, session 变量相当有效。这是执行此操作的常规方法。

  1. Im unsure whether there are any work arounds that unauthorized users can perform to view the page

只有当他们可以劫持授权用户的 session 时。但就用户身份验证而言,几乎所有的赌注都落空了。劫持 session 需要他们获取其他用户的 cookie。如果您使用 SSL 加密您的连接,您将尽可能安全。

  1. I'm perhaps missing some critical info inside the isLogged() method?

不,仅此而已。

关于PHP检查用户是否可以访问页面的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48222663/

相关文章:

php - 如何从 PHP 执行批处理脚本

php - 使用 PHP 从 MySQL 中提取数据

php - 在 PHP 插件中禁用自动格式化(IDE 插入大括号、引号等)?

javascript - 休息 api session

java - Spring 服务器/客户端 session 和 Hibernate session

php - 将购物车 session 保存到数据库

session - koajs session - session 存储在哪里?

php - 如何使用 TinyButStrong 检查 bool 变量是 1/true 还是 0/false?

php - 能否回显SESSION的大小?

java - 创建 session 和 cookie 之间的区别?