前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决initialize重定向后,session为null

解决initialize重定向后,session为null

原创
作者头像
以星河为聘礼
修改2021-09-17 16:52:38
1.3K0
修改2021-09-17 16:52:38
举报
文章被收录于专栏:编码遇到的坑编码遇到的坑

在使用判断用户是否登录时,我们将页面跳转后session会被初始化,因此我们需要先将session保存,同时设置session和cookie的有效期

先进行查看是否有sessionId
先进行查看是否有sessionId

当我们调试第一个界面有session的id意味着已经写进了session

官方文档提供了session的保存方法

代码语言:javascript
复制
/think/facade/Session::set("value","赋值")            //保存session中
/think/facade/Session::get("value")                    //获取value

当我们在登陆界面登陆后跳转到后台首页这个过程如果没有保存session,session数据就会丢失。打印出来就为空,因此我们在登录的时候就保存下session,在后台首页的php文件中拉取session就可以

如下现在登录接口中保存session

代码语言:javascript
复制
/think/facade/Session::set("adminUSER",$adminUsers);    //此次保存的$adminUsers是上面提交的登录数组需要自行创建

接下来就是在Usercontroller中创建方法如下,创建方法后需要在controller下的文件中继承Usercontroller

admin/controller/Usercontroller.php

代码语言:javascript
复制
<?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

代码语言:javascript
复制
.........
// 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档