这里给出的是一个很常用的权限拦截例子,也是目前主流的方法,但存在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也是有风险的:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://it1995.blog.csdn.net/article/details/123321918
内容来源于网络,如有侵权,请联系作者删除!