使用自动登录后无法退出 [ 2.0 版本 ]
我按官方的源码在没改动的情况下开启了自动登录的功能
但是开启后发现登录后关闭浏览器下次打开他确实也是登录的状态,这是没有问题的
但是点退出Logout后 他确无法退出来,刷新还是登录的状态,关闭浏览器了重新打开他也还是登录的状态;那说明他根本就没有退出,没有清空Cookie
一步步跟踪到他有一个方法在USER类中
switchIdentity()
下面的
if ($this->enableAutoLogin) {
$this->removeIdentityCookie();
}
有执行删除Cookie的动作,但实际没有删除成功
在浏览器里面看到 _identity Cookie还存在
而刷新页面的时候 他会去取Cookie然后自动登录
导致点了退出 一刷新又登录上去了
请问有没有那位大神用到自动登录功能后无法退出成功的问题呀;
这怎么解决呢?
如果不启用自动登录功能就可以正常退出,因为没有自动登录他根本就没有生成Cookie,只是清空Session·
问题找到了 不是YII的问题是我自己写代码的问题,
我在跳转后用了一个EXIT();
就是因为他的问题 ,改成return false;就好了
但是我很奇怪 明明程序是按流程一步步走的,退出成功了才去exit(); 为什么还会造成影响;难道是在exit();的时候YII还有东西没有执行完这个有待去测试了
如:在一个正常的Controller中
logout();
redirect();
exit();
也就是说他应该先执行退出 完了最后才exit;呀 为什么加了这个就退出不了了,呵呵,这很奇怪!
还真是,加了退不出来;
你们可以测试一下 直接在退出的操作后面加一个exit();或者die();
\Yii::$app->user->logout();
exit;//die();
他就无法退出成功了
共 7 个回答
-
你的cookie是不是readOnly了
共 5 条回复 -
dashixiong 回答于 2017-05-24 10:00 举报
cookie是无法删除的兄弟,要做的只能说是把session中的内容清空,由此可见,你对cookie和session并不是很了解。
共 5 条回复dashixiong 回复于 2017-05-24 10:17 回复@xjcallen 你执行一下这个,然后刷新浏览器看看,cookie还在不,如果在,那你这句就没起作用,它根本就删不掉,浏览器当然是可以删掉的
dashixiong 回复于 2017-05-24 10:19 回复@xjcallen 为什么删不掉?因为你刚删了的时候,它又生成了,因为你一访问yii程序就生成。
dashixiong 回复于 2017-05-24 10:24 回复@xjcallen 就是去处理session,把session中标识登录状态的那个值设置为null就可以了。然后判断是否为null就行了。
-
dashixiong 回答于 2017-05-24 10:05 举报
给你分析一下,当php中执行session_start()这个方法的时候就会产生cookie,这个cookie是临时的,也就是浏览器关闭再次打开的时候cookie中的value就会发生变化,如果你使用了记住密码功能,浏览器关闭再次打开cookie的value是不变的,你说删除cookie怎么删?当你访问网站的时候cookie就生成,而且cookie如果存在你是无法更新它的,所以你只能是去搞session,例如你使用$_SESSION['uid'] = 1;把$_SESSION['uid']设置为null,你判断这个是否为null就知道它是不是处于登录状态了。
共 1 条回复 -
dingjj2010 回答于 2017-05-24 14:10 举报
看一下这个官网对退出是怎么处理的....
对于_identity的内容设置为空了.
登陆状态都是有设置_identity的值.对于后台session 默认是有清空的,但是也可以根据传值$destroySession=false不清空
if ($destroySession && $this->enableSession) { Yii::$app->getSession()->destroy(); }
-
-
-
xjcallen 东莞
最后登录:2022-06-30
在线时长:6小时36分
- 粉丝0
- 金钱175
- 威望0
- 积分235