PHP笔记-用户登录&权限拦截说明

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP笔记-用户登录&权限拦截说明相关的知识,希望对你有一定的参考价值。

这里给出的是一个很常用的权限拦截例子,也是目前主流的方法,但存在cookie劫持,有安全风险。后面有博文说如何去解决。

对应的权限登录的类是这样的:

class PrivilegeController extends Controller 
	......
	......
	......

其中权限是在Controller类中,如下:

class Controller

    protected $smarty;

    public function __construct()

        include VENDOR_PATH . "smarty/Smarty.class.php";
        $this->smarty = new \\Smarty();
        $this->smarty->template_dir = APP_PATH . P . "/view/";
        $this->smarty->compile_dir = RESOURCES_PATH . "views";

        if(strtolower(C) != "privilege")

            if(isset($_COOKIE['id']))

                $userModel = new UserModel();
                $user = $userModel->getById((int)$_COOKIE['id']);
                if($user)

                    $_SESSION['user'] = $user;
                    return;
                
            

            $this->error("未登录,请先登录", "user", "privilege", "login");
        
    

	......
	......
	......
	......

从中可以看到这里主要是通过拿到浏览器的COOKIE来判断,拿的这个值通过查询(商用库、Redis等)存不存,存在就放行。并且把$_SESSION['user']存起来。

另外,只有Controller不为privilege的请求,都会被拦截。

设置COOKIE是在登录函数里面,如下:

    public function check()

        $useName = trim($_POST["userName"]);
        $password = trim($_POST["password"]);
        $captcha = trim($_POST["captcha"]);

		......
		......
		......

        @session_start();
        $_SESSION['user'] = $user;
        setcookie('id',$user['user_id'],time() + 1 * 24 * 3600);

        $this->success("登录成功", '', 'dashboard', "index");
    

退出登录的:

    public function logout()

        session_destroy();
        setcookie('id','',1);
        $this->success("退出成功", "", "", "login");
    

这里设置的cookie是哪里user_id,对应的是这个

通过修改php.ini可以看其session

 内容如下:

 但这种,存在cookie劫持,并且这里会把user_id带给cookie也是有风险的:

 

以上是关于PHP笔记-用户登录&权限拦截说明的主要内容,如果未能解决你的问题,请参考以下文章

粗粒度权限控制(拦截是否登录拦截用户名admin权限)

权限控制方案之——基于URL拦截

SpringMVC拦截器在用户登录权限中的应用

Spring Boot 统一功能处理(用户登录权限效验-拦截器异常处理数据格式返回)

Springmv 拦截器&异常处理

一个网站的权限管理,用过滤器还是拦截器更好