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笔记-用户登录&权限拦截说明的主要内容,如果未能解决你的问题,请参考以下文章