首页 > 开发 > PHP > 正文

Yii2框架实现登录、退出及自动登录功能的方法详解

2024-05-04 22:45:02
字体:
来源:转载
供稿:网友

本文实例讲述了Yii2框架实现登录、退出及自动登录功能的方法。分享给大家供大家参考,具体如下:

自动登录的原理很简单。主要就是利用cookie来实现的

在第一次登录的时候,如果登录成功并且选中了下次自动登录,那么就会把用户的认证信息保存到cookie中,cookie的有效期为1年或者几个月。

在下次登录的时候先判断cookie中是否存储了用户的信息,如果有则用cookie中存储的用户信息来登录,

配置User组件

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

'user' => [ 'identityClass' => 'app/models/User', 'enableAutoLogin' => true,],

我们看到enableAutoLogin就是用来判断是否要启用自动登录功能,这个和界面上的下次自动登录无关。

只有在enableAutoLogin为true的情况下,如果选择了下次自动登录,那么就会把用户信息存储起来放到cookie中并设置cookie的有效期为3600*24*30秒,以用于下次登录

现在我们来看看Yii中是怎样实现的。

一、第一次登录存cookie

1、login 登录功能

public function login($identity, $duration = 0){  if ($this->beforeLogin($identity, false, $duration)) {   $this->switchIdentity($identity, $duration);   $id = $identity->getId();   $ip = Yii::$app->getRequest()->getUserIP();   Yii::info("User '$id' logged in from $ip with duration $duration.", __METHOD__);   $this->afterLogin($identity, false, $duration);  }  return !$this->getIsGuest();}

在这里,就是简单的登录,然后执行switchIdentity方法,设置认证信息。

2、switchIdentity设置认证信息

public function switchIdentity($identity, $duration = 0){  $session = Yii::$app->getSession();  if (!YII_ENV_TEST) {   $session->regenerateID(true);  }  $this->setIdentity($identity);  $session->remove($this->idParam);  $session->remove($this->authTimeoutParam);  if ($identity instanceof IdentityInterface) {   $session->set($this->idParam, $identity->getId());   if ($this->authTimeout !== null) {    $session->set($this->authTimeoutParam, time() + $this->authTimeout);   }   if ($duration > 0 && $this->enableAutoLogin) {    $this->sendIdentityCookie($identity, $duration);   }  } elseif ($this->enableAutoLogin) {   Yii::$app->getResponse()->getCookies()->remove(new Cookie($this->identityCookie));  }}

这个方法比较重要,在退出的时候也需要调用这个方法。

这个方法主要有三个功能

① 设置session的有效期

② 如果cookie的有效期大于0并且允许自动登录,那么就把用户的认证信息保存到cookie中

③ 如果允许自动登录,删除cookie信息。这个是用于退出的时候调用的。退出的时候传递进来的$identity为null

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表