YII2自动登录Cookie总是失效的解决方法
前言
最近做Yii2自动登录功能,发现即使开启了Yii2的自动登录配置功能,浏览器关闭后,再次打开浏览器还是处于非登录状态。
网上查询资料基本没有相同情况。
查询登录源码:
protected function sendIdentityCookie($identity, $duration)
{
$cookie = new Cookie($this->identityCookie);
$cookie->value = json_encode([
$identity->getId(),
$identity->getAuthKey(),
$duration,
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$cookie->expire = time() + $duration;
Yii::$app->getResponse()->getCookies()->add($cookie);
}
打印cookie变量发现内容没有任何问题。复制代码去其他控制器执行也是毫无问题。
查看浏览器,Yii2设置的sessionID也是正常的,也就是cookie只是这里设置不成功。
既然,系统没问题,浏览器没问题,那么就是传输过程有问题。
后来终于发现:原来在调用$model->login()登录方法过后,我直接输出json数据到浏览器,并且在后面有exit方法,直接阻止了控制器继续执行。
所以,yii2执行到exit处就完了,导致头信息header也没有被传输到浏览器。所以浏览器根本没有收到php设置cookie的命令。
总结
Yii2登录或者需要设置cookie的控制器,千万不要exit or die,直接使用if else去判断,不要打断执行。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
Yii2实现多域名跨域同步登录退出
在平台开发过程中,项目分为前台(frontend)www.xxx.com和后台(backend) yun.xxx.com两部分,绑定两个域名, 我们知道在没有绑定域名的时候前后台可以同步登录和退出,但是绑定域名后就失效了,原因是session的作用域不同了. 两个域名的session作用域都只限制在了自己的域名上,我们的解决办法是将不同二级域名的作用域都改成顶级域名xxx.com. 在common/config/main.PHP里面增加如下代码: //跨域session域名配置,获取当前主机名
-
Yii2框架实现登录、退出及自动登录功能的方法详解
本文实例讲述了Yii2框架实现登录.退出及自动登录功能的方法.分享给大家供大家参考,具体如下: 自动登录的原理很简单.主要就是利用cookie来实现的 在第一次登录的时候,如果登录成功并且选中了下次自动登录,那么就会把用户的认证信息保存到cookie中,cookie的有效期为1年或者几个月. 在下次登录的时候先判断cookie中是否存储了用户的信息,如果有则用cookie中存储的用户信息来登录, 配置User组件 首先在配置文件的components中设置user组件 'user' => [ '
-
Yii2框架实现注册和登录教程
注册 在advanced模板中,进入frontend/index.php?r=site%2Fsignup页面,可以看到框架的注册页面 填写完Username.Email和Password后点击Signup后,如果格式不对,frontend/models/SignuForm中的rules()函数会进行初步验证,所有格式正确后,数据传输到 frontend/controllers /SiteController中的 actionSignup()函数中,函数加载用户输入的注册信息,在frontend/
-
Yii2中OAuth扩展及QQ互联登录实现方法
本文实例讲述了Yii2中OAuth扩展及QQ互联登录实现方法.分享给大家供大家参考,具体如下: 复制代码 代码如下: php composer.phar require --prefer-dist yiisoft/yii2-authclient "*" Quick start 快速开始 更改Yii2的配置文件config/main.php,在components中增加如下内容 'components' => [ 'authClientCollection' => [ 'cl
-
从零开始学YII2框架(四)扩展插件yii2-kartikgii
今天发现了一款好用的插件yii2-kartikgii.它是基于系列插件kartik-v的拓展. 插件介绍 这个插件主要功能是帮助你在使用gii生成代码curd的时候生成kartik-gird的.不需要每次用默认的gii工具生成代码之后再手动添加kartik-gird,这正是我想要的功能.快速生成kartik-grid. 学习这个插件之前你可能需要了解下yii2-gird插件:传送门 插件安装与配置 直接看插件网址: http://www.yiiframework.com/extension/yi
-
从零开始学YII2框架(三)扩展插件yii2-gird
yii2-gird 插件是Yii2.0的一个扩展.它在官方的girdview基础上扩展了一些实用的功能. 比如: 把表格包装在bootstrap - panel标签下,使之更美观: Float Header功能,实现滑动表格的时候,表字段至于屏幕上方,方便查看: 新增操作栏说明label: 页面统计功能: 新增重置表格功能: 新增导出表格功能,包括四种常用格式[html.CSV.txt.Excel]. 非常感谢Kartik团队带来的好用的插件.Kartik团队的其他插件也很好用的.推荐试用. 安
-
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Yii2 框架 之所以称之为高效快速开发的一款框架,是因为有一个神奇的工具Gii 用过Yii1框架的Coder都知道,Gii可以为你快速生成代码,也就是说搭建一个可以增删改查的WebApp可能一行代码都不用写. 当然作为Coder,不写代码怎么能实现我们想要的功能呢. 上次介绍了如何安装Yii框架,本次介绍一下如何使用gii工具快速实现CRUD功能. 框架安装完成后可以通过如下链接访问Gii工具 http://localhost/yii2test/backend/web/index.php?r=
-
从零开始学YII2框架(二)通过 Composer 安装扩展插件
目前yii2的扩展还不是很多,截止到今天,在官网一共有33个,不过这些插件中不乏有优秀的扩展插件, 我尝试了几个,发现了一系列好用的Yii2插件,作者是来自印度的krajee团队,他们写的插件都很好用.推荐一下. krajee团队的网站:http://krajee.com,有几个不错的插件可以尝试. 下面来介绍Yii2的插件安装方法.通过Composer安装插件yii2-detail-view. Git 推荐安装Git,Composer安装插件时候会用到Git Clone,Git官方下载网站:传
-
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
这只是自己练习的一个记录而已. 因为某种原因,不想用yii自带的user表,想用自己建的admin数据库表,修改如下: 1. 参考高级模板里里的common\models\User 修改 Admin 2. 修改配置文件里面的 'user' => [ //'identityClass' => 'common\models\User', 'identityClass' => 'common\models\Admin', 'enableAutoLogin' => true, 3. 修改L
-
从零开始学YII2框架(六)高级应用程序模板
高级应用程序模板 这个模板用在大型的团队开发项目中,而且后台从前台独立分离出来以便于部署在多个服务器中.由于YIi2.0的一些新的特性,这个程序模板的功能要更深一点.提供了基本的数据库的支持,注册.密码找回等功能. 安装 可以通过Composer来安装 如果没有安装Composer,先安装 curl -s http://getcomposer.org/installer | php 然后用如下命令来获取 php composer.phar create-project --prefer-dist
-
从零开始学YII2框架(一)通过Composer安装Yii2框架
最近在学习PHP,着手找一个能快速上手的框架来学习.一开始看兄弟连视频时候讲师推荐ThinkPHP.于是我选择了ThinkPHP来尝试,这个框架的上手难度系数不大,能快速开发一款应用.适合小型的企业应用.因为是国人开发的,中文支持比较好.有比较全面的文档,官网社区也比较活跃.因为我接触的项目都是用Oracle数据库的,所以我想找一款对Oracle支持比较好的PHP框架,但是ThinkPHP框架对Oracle的支持实在是不好.所以我换了Yii框架来试试对Oracle的支持程度. Yii框架现在稳定
随机推荐
- JS弹出层的显示与隐藏示例代码
- Oracle AS关键字 提示错误
- iOS开发之触摸事件以及手势
- 深入学习C语言中的函数指针和左右法则
- php在多维数组中根据键名快速查询其父键以及父键值的代码
- Android开发环境搭建
- js正则表达式的使用详解
- 简介Django框架中可使用的各类缓存
- Python六大开源框架对比
- 如何应用C#实现UDP的分包组包
- asp.net下利用js实现返回上一页的实现方法小集
- 推荐SQL Server 重新恢复自动编号列的序号的sql代码
- mysql 服务完全卸载技巧
- 文本域光标操作的jQuery扩展分享
- Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
- 简介JavaScript中的getUTCFullYear()方法的使用
- Node.js如何使用Diffie-Hellman密钥交换算法详解
- 使用checked语句防止数据溢出的解决方法
- 学习Java模拟实现百度文档在线浏览
- Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例
