yii自动登录

在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信息

时间: 2024-08-04 16:29:12

yii自动登录的相关文章

yii2 登录、退出、自动登录

自动登录的原理很简单.主要就是利用cookie来实现的在第一次登录的时候,如果登录成功并且选中了下次自动登录,那么就会把用户的认证信息保存到cookie中,cookie的有效期为1年或者几个月. 在下次登录的时候先判断cookie中是否存储了用户的信息,如果有则用cookie中存储的用户信息来登录, 配置User组件 首先在配置文件的components中设置user组件 'user' => [            'identityClass' => 'app\models\User', 

yii2 自动登录解读

今日遇到一个需要将当前用户,全部登出系统(YII2框架制作)重新登录的需求 仔细回忆一遍,Yii2的登录流程,竟然有些不太明白,于是下午空闲时 重新看了下Yii2的用户登录源码 文件位于YII2项目下:vender/yiisoft/yii2/web/User.php /** * @身份属性类对象 是一个 实现IdentityInterface接口的一个对象 */ public $identityClass; /** * @var bool 属性 是否使用(cookie)自动登录 */ publi

[Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

目录(?)[+] 前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时继续介绍Selenium+Python官网Locating Elements部分内容.        希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~        [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)        

Filter自动登录

Dao层略过 Domain略过 Service层过 Web层 Select逻辑 获取表单数据,Web-service--Dao返回用户信息 如果返回不为null否则,重定向到登录页面.则判断用户是否勾选7天免登录,如果勾选(判断一下).把用户数据存入session域中,并且要创建一个cookie设置时间为7天,保存cookie中.  select代码: public void doGet(HttpServletRequest request, HttpServletResponse respon

python自动化,自动登录并且添加一个门店

''' 本文主要通过以前公司的对外平台,测试自动登录并且自动添加一个门店 ''' # _*_ coding: utf-8 _*_ from selenium import webdriverimport timedriver = webdriver.Chrome()driver.maximize_window()driver.get("http://121.41.42.104:18888")driver.find_element_by_name("UserName"

Azure 基础:用 PowerShell 自动登录

PowerShell 是管理 Azure 的最好方式,因为我们可以使用脚本把很多的工作自动化.比如把 Azure 上的虚拟机关机,并在适当的时间把它开机,这样我们就能节省一些开支,当然我们同时也为减少二氧化碳的排放做出了贡献! PowerShell 的 Azure 模块中为我们提供了不同的 API, 早期的叫 ASM(Azure Service Manager).随着 Azure 的发展变化,又出现了一套新的 API 叫 ARM(Azure Resource Management).我们这里仅介

windows2008r2设置开机后用户自动登录

因为有些程序在计划任务中设置开机就启动以后,当登录帐号时无法将已经运行的程序切换到前台进行操作(就是无法在桌面上显示软件的界面,比如我这里需要使用的<vm虚拟机>.<v-box虚拟机>和<typsoft ftp服务器>这几个软件),想了一下,感觉可以通过设置开机自动登录帐号后再启动程序的方法解决,于是在网上找了下设置的方法: 设置开机自动用户登录 开始>运行 control userpasswords2 ,出现(如图1),选择要自动登录的用户账户,然后将"

黑马day14 过滤器之自动登录小案例

自动登录分析: 如果是第一次登陆就把user放到session域中,同时建立一个cookie把用户名和密码保存到cookie中,然后写一个过滤器, 如果是未登录的状态就把cookie中把用户名和密码拿出来和数据库中查询的作比较,如果一致就把user设置到session域中. 1.登陆页面login.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&

关于新浪微博注销后自动登录的问题

最近程序中需要做分享功能,腾讯的的OK,但新浪的注销后,再次点击时,本来应该进入到登录的授权页面,webview形式出现.但结果每次再进入时,会自动登录上次注销的号. 查了相关资料后,发现有两种解决办: 1: 因为只清除了登录数据,但是uiwebview的cookie仍然保留在本地,所以需要清除uiwebview的cookie内容,清除方式如下: NSHTTPCookie *cookie;    NSHTTPCookieStorage *storage = [NSHTTPCookieStorag