在使用判断用户是否登录时,我们将页面跳转后session会被初始化,因此我们需要先将session保存,同时设置session和cookie的有效期
当我们调试第一个界面有session的id意味着已经写进了session
官方文档提供了session的保存方法
/think/facade/Session::set("value","赋值") //保存session中
/think/facade/Session::get("value") //获取value
当我们在登陆界面登陆后跳转到后台首页这个过程如果没有保存session,session数据就会丢失。打印出来就为空,因此我们在登录的时候就保存下session,在后台首页的php文件中拉取session就可以
如下现在登录接口中保存session
/think/facade/Session::set("adminUSER",$adminUsers); //此次保存的$adminUsers是上面提交的登录数组需要自行创建
接下来就是在Usercontroller中创建方法如下,创建方法后需要在controller下的文件中继承Usercontroller
admin/controller/Usercontroller.php
<?php
namspace app\admin\controller
use app\BaseController;
use think\exception\HttpResponseException;
use think\facade\Session;
class Usercontroller exetends BasesController
{
//生命全绝adminUser
public $adminUser = null
public function initialize ()
{
//判断用户是否登录
parent::initialize();
if(empty($this->isLogin())){
retrun redirect(url("/admin/login/index")) //判断用户是否登录
// 如果为null为未登录跳转到login
}
}
public function isLogin()
{
$this->adminUser->Session::get("adminUSER","adminUSER");
if(empty($his->adminUser)){
retrun false;
}
retrun true;
}
//传动态参数$args
public function redirect(...$args)
{
throw new HttpResponseException(redirect(...$args));
}
}
经过上面写过后initialize会将继承的界面都重写,因而会进入死循环情况,所以我们接下来需要在login中将initialize重写
login.php
.........
// 1.因为login中继承了Usercontroller控制器,所以在此处重新initialize
// 2.在此判断Usercontroller中是否拉取到session值,具体session参考tp6官方文档
//链接:https://www.kancloud.cn/manual/thinkphp6_0/1037635
public function initialize(){
//判断用户是否登录。如过登录跳转到后台首页
if($this->isLogin())
{
retrun $this->redirect(url("/admin/index/index"));
}
}
.........
到此处重定向基本上已完成,大多数小伙伴应该都是出现在重定向后,session数据丢失问题,其实session结束会话后会销毁session,如exit(),die(),以及跳转页面也会丢失session数据,大多数问题参考文档就能解决。感谢大家观看
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。