在yii,登录页面选择记住密码,下次就会自动登陆

前些天,自己增加了一个web应用,但是发现虽然选择记住密码,没选退出,关闭浏览器,重新进入还会跳转到登陆页面

自动登录是利用cookie实现的

配置User组件
  首先在配置文件的components中设置user组件

 'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
'idParam' => '__check',
'identityCookie'=> ['name'=>'_check','httpOnly' => true], ],

登陆

vendor\yiisoft\yii2\web\User.php的login中

$this->switchIdentity($identity, $duration);

先登录在调用switchIdentity方法,设置认证信息,在退出的时候也需要调用这个方法

  1. 设置session的有效期
  2. 如果cookie的有效期大于0并且允许自动登录,那么就把用户的认证信息保存到cookie中,调用sendIdentityCookie方法
  3. 如果允许自动登录,删除cookie信息。这个是用于退出的时候调用的。退出的时候传递进来的$identity为null

sendIdentityCookie

存储在cookie中的用户信息包含有三个值:

    • $identity->getId()
    • $identity->getAuthKey()
    • $duration

getId()和getAuthKey()是在IdentityInterface接口中的。在设置User组件的时候,这个User Model是必须要实现IdentityInterface接口的。所以,可以在User Model中得到

第三值就是cookie的有效期

自动从cookie登录

用户的认证信息已经存储到cookie中了,下次直接从cookie里面取信息然后设置就可以了

Yii提供了AccessControl来判断用户是否登录,有了这个就不需要在每一个action里面再判断了

public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['logout'],
'rules' => [
[
'actions' => ['logout'],
'allow' => true,
'roles' => ['@'],
],
],
],
];
}

在AccessControl访问控制里面通过IsGuest属性来判断是否是认证用户,然后在getIsGuest方法里面是调用getIdentity来获取用户信息,如果为空就是游客(未登录),否则是认证用户。

是认证用户,调用renewAuthStatus(),重新生成用户认证信息

renewAuthStatus()先通过session来判断用户,因为用户登录后就已经存在于session中了。然后再判断如果是自动登录,那么就通过 loginByCookie()方法用cookie信息来登录。

loginByCookie()先读取cookie值,然后$data = json_decode($value, true);反序列化为数组。

要想实现自动登录,这三个值都必须有值。在User Model中还必须要实现findIdentity、validateAuthKey这两个方法。

退出

logout()

$this->switchIdentity(null);先把当前的认证设置为null

再判断如果是自动登录功能则再删除相关的cookie信息

yii自动登录的更多相关文章

  1. yii2.0自动登录功能的实现方法

    参考地址:http://www.kuitao8.com/20150518/3747.shtml 自动登录的原理很简单.主要就是利用cookie来实现的在第一次登录的时候,如果登录成功并且选中了下次自动 ...

  2. yii2 登录、退出、自动登录

    自动登录的原理很简单.主要就是利用cookie来实现的在第一次登录的时候,如果登录成功并且选中了下次自动登录,那么就会把用户的认证信息保存到cookie中,cookie的有效期为1年或者几个月. 在下 ...

  3. yii2 自动登录解读

    今日遇到一个需要将当前用户,全部登出系统(YII2框架制作)重新登录的需求 仔细回忆一遍,Yii2的登录流程,竟然有些不太明白,于是下午空闲时 重新看了下Yii2的用户登录源码 文件位于YII2项目下 ...

  4. Linux开机自动登录(文本模式)

    • Linux系统启动登录过程 以RedHat/CentOS为例,Linux系统Level3模式下从启动到登录的整个过程大致如下: 1> 加载BIOS信息:包含了CPU/显卡/内存/硬盘/网卡等 ...

  5. expect实现自动登录

    自动登录主机(ssh) 建脚本item2login.sh,包含如下内容 #!/usr/bin/expect set timeout 30 spawn ssh -p [lindex $argv 0] [ ...

  6. cookie自动登录的实现

         cookie自动登录是指把用户登录的信息按期限(自定)保存在客户端,当用户请求登录时判断客户端用没有cookie对象,有的话填充值,否则登录界面的输入框为空,不进行填充.      登录界面 ...

  7. windows 2003自动登录的具体步骤

    在win2003系统中,使用最多的可能就是远程操作了,关于远程操作的那些事很多用户还是有些迷茫的.如果win2003系统远程重启后,要重新登录系统十分的麻烦,如何才能实现重启后的自动登录呢?让高手告诉 ...

  8. 如何设置phpMyAdmin自动登录和取消自动登录

    如何设置phpMyAdmin自动登录? 首先在根目录找到config.sample.inc.php复制一份文件名改为config.inc.php(如果已经存在 config.inc.php 文件,则直 ...

  9. 利用activeX控件在网页里自动登录WIN2003远程桌面并实时控制

    首先要自己配置并打开受控端的WEB远程桌面服务,这个在“添加/删除windows组件”里有,我只在windows 2003 server里试过,没试过XP.下面我们在客户端安装微软提供的远程桌面客户端 ...

随机推荐

  1. MySQL 基础语句的练习

    -- *** ①.对数据库的操作 *** -- -- 查看所有的数据库 SHOW DATABASES; -- 创建数据库 CREATE DATABASE day1026 DEFAULT CHARACT ...

  2. java 22 - 17 多线程之等待唤醒机制(接16)

    先来一张图,看看什么叫做等待唤醒机制 接上一章的例子. 例子:学生信息的录入和获取 * 资源类:Student  * 设置学生数据:SetThread(生产者) * 获取学生数据:GetThread( ...

  3. View.inflate和LayoutInflater的inflate方法区别

    平时ListView加载item中,adapter的getView方法中,我们经常用到: LayoutInflater.from(mContext).inflate(R.layout.it ,pare ...

  4. parentNode的兼容性问题

    IE9下获取对象层次中的父对象,9以上获取文档层次中的父对象 <table><tr><p><td id="haha">haha< ...

  5. 在ASP.NET中如何运行后台任务

    from:https://blogs.msdn.microsoft.com/scott_hanselman/2014/12/21/asp-net/ [原文发表地址] How to run Backgr ...

  6. SQL SERVER 系统库查询

    本文内容主要来自网络,如有错误请路过的大牛指点迷津. 1.sqlserver 数据库最大并发连接数 sqlserver的最大连接数虽然说是不限制,但实际的限制数量是32767,如果需要超出这个数量,一 ...

  7. usb驱动开发22之驱动生命线

    我们总是很喜欢高潮,不是吗?那就好好对待她哦.我们来看一下linux中的高潮部分设备是怎么从Address进入Configured的. usb_set_configuration函数的代码就不贴了,可 ...

  8. mongodb.conf配置文件详解

    mongod --config /etc/mongodb.conf 配置如下:verbose:日志信息冗余.默认false.提高内部报告标准输出或记录到logpath配置的日志文件中.要启用verbo ...

  9. DispatcherHelper

    DispatcherHelper 通常,WPF 应用程序从两个线程开始:一个用于处理呈现, 一个用于管理 UI.呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入.处理事件.绘制屏幕 以及运行应用 ...

  10. (转) RSA算法原理(一)

    最近用到了RSA加密算法,虽然有现成的,但是想看看它的原理,翻到此文,感觉写得很好,通俗易懂,转了.   作者: 阮一峰 日期: 2013年6月27日 如果你问我,哪一种算法最重要? 我可能会回答&q ...