久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Yii2框架實現登錄、退出及自動登錄功能的方法詳解

這篇文章主要介紹了Yii2框架實現登錄、退出及自動登錄功能的方法,結合實例形式詳細分析了Yii2框架實現登錄、退出及自動登錄功能的原理、實現方法與相關操作注意事項,需要的朋友可

本文實例講述了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

protected function sendIdentityCookie($identity, $duration)
{
  $cookie = new Cookie($this->identityCookie);
  $cookie->value = json_encode([
   $identity->getId(),
   $identity->getAuthKey(),
   $duration,
  ]);
  $cookie->expire = time() + $duration;
  Yii::$app->getResponse()->getCookies()->add($cookie);
}

存儲在cookie中的用戶信息包含有三個值:

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

getId()和getAuthKey()是在IdentityInterface接口中的。我們也知道在設置User組件的時候,這個User Model是必須要實現IdentityInterface接口的。所以,可以在User Model中得到前兩個值,第三值就是cookie的有效期。

二、自動從cookie登錄

從上面我們知道用戶的認證信息已經存儲到cookie中了,那么下次的時候直接從cookie里面取信息然后設置就可以了。

1、AccessControl用戶訪問控制

Yii提供了AccessControl來判斷用戶是否登錄,有了這個就不需要在每一個action里面再判斷了

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

2、getIsGuest、getIdentity判斷是否認證用戶

isGuest是自動登錄過程中最重要的屬性。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

我們在用pbootcms網站時候,后臺驗證碼不顯示或者顯示不清楚,這個要怎么解決? 今天html5模板網就給大家列出一下幾個會造成pbootcms驗證碼不顯示的原因。 1、中文路徑問題(建站大忌
本文主要給大家講述了PHP實現QQ登錄的開原理以及相關的代碼實現過程,對此有興趣和需要的朋友參考下吧。
這篇文章主要介紹了Laravel5.2使用Captcha生成驗證碼(session巨坑),需要的朋友可以參考下
Yii2的rule用于對模型屬性進行驗證,scenario用戶定義不同場景下需要驗證的模型,下面這篇文章主要給大家介紹了關于Yii2中場景(scenario)和驗證規則(rule)的相關資料,文中通過示例代碼介
隨著微信的普及,掃碼登錄方式越來越被現在的應用所使用。它因為不用去記住密碼,只要有微信號即可方便快捷登錄.這里基于微信公眾平臺的帶參數臨時二維碼,并且結合 Swoole 的
本篇文章主要介紹了淺談使用 Yii2 AssetBundle 中 $publishOptions 的正確姿勢,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 精品视频在线观看 | 国产精品美女久久久 | 一区二区三区视频在线免费观看 | 亚洲一本 | 成人免费小视频 | 国产精品国产三级国产aⅴ无密码 | 国产精品揄拍一区二区 | 国产电影精品久久 | 男女羞羞在线观看 | 日本不卡高字幕在线2019 | 农村妇女毛片精品久久久 | 精品一区二区三区91 | 91精品综合久久久久久五月天 | 最新中文字幕 | 欧美成人激情 | 久久久久久久国产精品视频 | 国产成在线观看免费视频 | 久久久久久色 | 成年人黄色一级片 | 欧美激情一区二区三级高清视频 | 久久久激情 | 香蕉久久久 | 最新中文字幕一区 | 视频在线h| 亚洲精品久久久久国产 | 久久国产精品视频 | 久久国产免费 | 日本精品视频在线观看 | 天天夜天天操 | 国产精品一区在线 | 99视频免费在线 | 国产精品久久9 | 狠狠av| 91麻豆蜜桃一区二区三区 | 中文字幕日韩在线观看 | 国产成人免费观看 | 波多野结衣在线观看一区二区三区 | 成人午夜网站 | 男人天堂网址 | 欧美日韩高清免费 | 91精品国产91久久久久久不卞 |