php避免重定向,关于thinkphp避免登录出现循环重定向问题

我们在写网站的时候经常会出现这种情况,登录的时候,老是说你的页面中包含循环重定向的内容.

下面我就来说明一下几种常见的情况.

在thinkphp中,如果是后台的话,要求必须登录才能进入到主管理界面.那么我们可以通过这种方法来实现.

在控制器中建立一个 CommonController 通用控制器,然后在里面写一个

public function _initialize(){

//检查是否有session('username')的内容,如果没有则跳转到登录页面...

没有登录,则跳到登录控制器

$this->error("请登录",U('login/login'));

}

然后后台所有的控制器都要继承这个CommonController ,并且在每个控制器中都写这个函数

public function _initialize(){

parent::_initialize();//必须写上这一句,否则子类将会复写父类的方法,这样父类的验证操作就失效了..

}

这里有没有考虑过这样的问题....

如果我们的登录控制器是LoginController ,也继承这个CommonController的话,问题就来了,当你登录到后台的任何一个页面时,都会提前进行CommonController的_initialize检查登录操作,没有登录,则跳到Login控制器,好了跳到Login控制器之后,又将调用CommonController的_initialize 函数..这就是问题的所在了...

解决方案,要么LoginController不继承CommonController,要么在LoginController中的必须写_initialize()

但是不要执行父类的_initialize()

public function _initialize(){

//做你想做的事情..

//不要使用parent::_initialize();即可

}

好了,如果是前台呢,前台分为几种情况.一种是必须登录,一种是部分模块需要登录.

对于必须登录的这种情况和后台类似了.

下面我们来说说部分模块需要登录的情况.

同样使用后台的方法...

我们可能需要就是当我点击某个模块之后,检查是否登录,没有登录则登录,登录完毕之后跳入我刚才点击的模块.

这里的问题是我们怎么保存我们之前点击的内容的呢..

这里有很多种解决方案,比较好的就是使用ajax方法实现.页面无刷新动态提交,还有我们可以在相应需要登录的模块直接将登录的模板引入进来.

不知大家是否意会到我的思路..

就是我们加入进入到我的博客模块.

public function index(){

if(not_login){

$this->display("将登录的视图引入进来");

exit;

}

else{

///

}

}

当然相对于的我们的登录控制器在登录成功之后就不要跳转了....直接返回登录成功即可..

public function login(){

if(success){

$this->success('登录成功!');

}

}

好了,搞定.

这是PHP中的实现,在Laravel框架或者其他的模块中,我们都要考虑这些问题...

我们使用过滤器来解决这个问题,同样的,我们不要在登录的路由上面增加这个过滤器就可以了.

还有一种情况是,如果你在过滤器中这么写

if(检测成功){

//跳转到首页..

}else{

//跳转到登录....

}

这块就有个问题了..如果你统一跳转到首页,好,第一次程序检测到你没有登录,然后跳转到登录界面,当你登录完毕之后,

系统将会跳转到首页...

在首页的控制器中,又将判断是否登录,发现登录,又跳到首页....

这样也是会出现循环重定向的...

解决办法,在过滤器中就不要写成功嘛,直接检测失败不就行了..

要是想成功直接跳转到首页,,其登录那里写,如果登录成功,就统一跳转到首页..

好了,希望你能看懂它.

Persistence makes life valuable .

Best Wishes.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值