亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

yii2獲取登錄前的頁面url地址電腦和微信瀏覽器上的實現以及yii2相關源碼的學習

2020-03-22 17:56:35
字體:
來源:轉載
供稿:網友
  • 對于一個有登錄限制(權限限制)的網站,用戶輸入身份驗證信息以后,驗證成功后跳轉到登錄前的頁面是一項很人性化的功能。那么獲取登錄前的頁面地址就很關鍵,今天在做一個yii2項目的登錄調試時發現了一些很有意思的問題,記錄下來。

    1,場景描述

    網站SiteA上的頁面Page2需要登錄后才能查看,Page2的鏈接放在頁面Page1的一個按鈕Button上,Page1在登錄前后都是可以訪問的,SiteA只提供了微信掃碼登錄的入口。

    2,功能需求

    假定訪客User已經在SiteA上注冊過,但當前未登錄。User在瀏覽Page1時,如果點擊頁面內的Button,則會來到掃碼登錄頁。用微信掃碼登錄成功后則會跳轉至Page2。

    3,跳轉頁面的代碼

    在微信授權后要回調的地址中設置好控制器controller和方法callback。

    然后在callback方法中進行用戶登錄后的邏輯編寫,如果登錄成功:

    return $this->goBack();

    這么寫在電腦瀏覽器上訪問網站時是沒有問題的,可以實現上述的功能需求。但是如果User是用手機在微信中訪問SiteA的Page1,然后點擊了Button,那么他是不是會像在電腦上那樣來到Page2呢?

    今天測試了下,沒有跳轉到Page2,反而來到了網站的首頁。至于原因是什么,現在還不太清楚。不過倒是找到了解決的方法:在微信授權后要回調地址的地址中加上state參數,在state參數中附帶上User登錄前瀏覽的頁面地址url。這樣在callback方法中就可以拿到url,上面登錄成功后的頁面跳轉就可以這么寫:

    1 if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') === false) {2     // User在pc瀏覽器中的跳轉3     return $this->goBack();4 } else {5     // User在微信瀏覽器中的跳轉6     return $this->redirect(url);7 }

    4,User登錄前瀏覽的頁面地址url該怎么獲得

    yii2中提供了一個方法,下面的方法就可以獲得登錄前的頁面url。

    Yii::$app->user->returnUrl;

    5,yii2是如何實現4中的方法和功能的呢?

    4中的方法是在yiiwebUser中定義的:

     1     html' target='_blank'>public function getReturnUrl($defaultUrl = null) 2     { 3         $url = Yii::$app->getSession()->get($this->returnUrlParam, $defaultUrl); 4         if (is_array($url)) { 5             if (isset($url[0])) { 6                 return Yii::$app->getUrlManager()->createUrl($url); 7             } else { 8                 $url = null; 9             }10         }11 12         return $url === null ? Yii::$app->getHomeUrl() : $url;13     }

    第3行yiiwebSession的get方法:

    1     public function get($key, $defaultValue = null)2     {3         $this->open();4         return isset($_SESSION[$key]) ? $_SESSION[$key] : $defaultValue;5     }

    可以看到yii2是從session中獲取的$this->returnUrlParam作為登錄前的瀏覽頁面地址。

    那么它是如何存儲的session,又是在什么時間存儲的呢?答案都在yiiwebUser和yiiwebSession中。

    yiiwebUser中的setReturnUrl()方法:

    1     public function setReturnUrl($url)2     {3         Yii::$app->getSession()->set($this->returnUrlParam, $url);4     }

    yiiwebUser中的loginRequired()方法中調用了setReturnUrl()方法:

     1     public function loginRequired($checkAjax = true, $checkAcceptHeader = true) 2     { 3         $request = Yii::$app->getRequest(); 4         $canRedirect = !$checkAcceptHeader || $this->checkRedirectAcceptable(); 5         if ($this->enableSession 6             && $request->getIsGet() 7             && (!$checkAjax || !$request->getIsAjax()) 8             && $canRedirect 9         ) {10             $this->setReturnUrl($request->getUrl());11         }12         // ......省略的代碼13     }

    然后在yii iltersAccessControl中的denyAccess()中又調用了loginRequired()

    1     protected function denyAccess($user)2     {3         if ($user->getIsGuest()) {4             $user->loginRequired();5         } else {6             throw new ForbiddenHttpException(Yii::t('yii', 'You are not allowed to perform this action.'));7         }8     }

    然后在yii iltersAccessControl中的beforeAction()中又調用了denyAccess()。

    AccessControl可以配置在控制器中,也可以配置在yii2應用的配置文件main.php中,如果配置了,那么在每一次調用控制器的action之前都會執行這個beforeAction(),也就會觸發session的存儲。

    yiiwebUser中設置了默認要存儲的url鍵名

    public $returnUrlParam = '__returnUrl';

    可以看下session中的內容驗證下:

    __returnUrl|s:29:'/controller/action?id=value';

    6,再來看下3中的$this->goBack()方法

    yiiwebContorller中

    1     public function goBack($defaultUrl = null)2     {3         return Yii::$app->getResponse()->redirect(Yii::$app->getUser()->getReturnUrl($defaultUrl));4     }

    可以看到它也是跳轉到從Yii::$app->getUser()->getReturnUrl()獲取的url,其實也就是從session中獲取的url地址。

    7,疑問

    那么上面的討論都是基于登錄操作(涉及到了登錄前后的邏輯),如果一個網站沒有登錄功能,也用不到權限控制(AccessControl),就更不用session存儲url了。嗯,應該是這么回事。不用登錄操作的話,也就不會涉及到剛開始提到的頁面跳轉了。


    PHP編程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品一区二区三区| 91国产中文字幕| 国产欧美日韩最新| 国产精品综合网站| 日韩精品在线私人| 亚洲一区二区三区成人在线视频精品| 欧美三级欧美成人高清www| 国产精品xxxxx| 国产精品狼人色视频一区| 欧美日韩国产成人| 欧美大学生性色视频| 黄色成人在线免费| 国产视频久久网| 中文字幕亚洲专区| 国产成人精品久久亚洲高清不卡| 国产欧美日韩综合精品| 亚洲视频在线播放| 欧美激情精品久久久久久大尺度| 成人有码在线播放| 日韩av网址在线观看| 亚洲欧美激情一区| 久久久国产视频| 日韩av中文在线| 欧美国产日韩一区二区在线观看| 草民午夜欧美限制a级福利片| 欧美第一黄网免费网站| 久久久久久久香蕉网| 日本国产一区二区三区| 在线视频欧美日韩精品| 欧美老女人www| 国产mv免费观看入口亚洲| 91国内在线视频| 国产精品久久中文| 欧美怡春院一区二区三区| 国产精品久久久久久久久免费| 91精品国产高清久久久久久久久| 亚洲自拍在线观看| 亚洲精品一区在线观看香蕉| 成人中文字幕在线观看| 成人av.网址在线网站| 日韩精品在线视频观看| 亚洲精品色婷婷福利天堂| 久热精品视频在线观看一区| 国产精自产拍久久久久久| 在线电影中文日韩| 91av中文字幕| 国产欧美va欧美va香蕉在| 国产精品h片在线播放| 国产福利精品视频| 在线视频日本亚洲性| 亚洲午夜色婷婷在线| 亚洲精品福利免费在线观看| 久久国产精品影视| 91sao在线观看国产| 69av在线视频| 国产精品入口免费视频一| 精品亚洲aⅴ在线观看| 日韩av影片在线观看| 国产福利精品av综合导导航| 黑人欧美xxxx| 欧美性极品xxxx做受| 亚洲日本中文字幕| 日韩欧美在线免费| 日韩欧美精品在线观看| 亚洲精品久久久久久久久久久久久| 日韩欧美国产成人| 亚洲精品成人免费| 久久影院资源网| 国产日韩欧美在线视频观看| 亚洲第一福利视频| 日韩欧美亚洲国产一区| 九九视频直播综合网| 久久香蕉国产线看观看av| 萌白酱国产一区二区| 日韩精品在线视频| 在线播放亚洲激情| 久久久久成人网| 久久久久久久久久久91| 久久91亚洲人成电影网站| 国产成人精品在线视频| 欧美高清无遮挡| 国产日韩欧美夫妻视频在线观看| 成人h片在线播放免费网站| 国产精品视频一区二区三区四| 欧美一区二区三区免费观看| 91国内揄拍国内精品对白| 亚洲成人精品视频在线观看| 欧美一级高清免费播放| 久久国产精品久久久久久| 欧美成人精品不卡视频在线观看| 超碰日本道色综合久久综合| 国产一区二区三区免费视频| 黑人欧美xxxx| 色偷偷88888欧美精品久久久| 26uuu亚洲伊人春色| 久久国产精品视频| 久久精品国亚洲| 中文字幕精品www乱入免费视频| 国产精品久久久久久婷婷天堂| 欧美一级大片视频| 国产精品久久久久77777| 亚洲国产精品嫩草影院久久| 精品调教chinesegay| 中文字幕亚洲情99在线| 欧美xxxx综合视频| 午夜精品久久久99热福利| 成人在线免费观看视视频| 久久在线免费观看视频| 欧美视频第一页| 国产国产精品人在线视| 亚洲精品久久久久| 中文字幕免费精品一区高清| 国产在线播放不卡| 狠狠做深爱婷婷久久综合一区| 欧美一级视频在线观看| 亚洲国产黄色片| 国产精彩精品视频| 日韩亚洲欧美中文在线| 色哟哟亚洲精品一区二区| 亚洲视频国产视频| 狠狠色狠狠色综合日日小说| 国产伦精品一区二区三区精品视频| 亚洲第一黄色网| 韩国三级日本三级少妇99| 在线观看91久久久久久| 久久久久久久久久av| 一本色道久久综合狠狠躁篇怎么玩| 色先锋资源久久综合5566| 日韩www在线| 久久久久久久网站| 成人黄色网免费| 国产精品一区二区三区在线播放| 国产精品一区二区电影| 青青青国产精品一区二区| 中文字幕亚洲专区| 91九色国产在线| 国产狼人综合免费视频| 91久久国产精品| 成人高清视频观看www| 亚洲精品综合久久中文字幕| 97在线精品国自产拍中文| 亚洲欧洲激情在线| 日韩av在线一区| 国产成人精品在线视频| 97在线看免费观看视频在线观看| 热门国产精品亚洲第一区在线| 欧美午夜www高清视频| 91国产美女视频| 欧美丝袜美女中出在线| 色爱av美腿丝袜综合粉嫩av| 国产精品久久久久久久av电影| 久久久精品亚洲| 久久久电影免费观看完整版| 成人国产精品免费视频| 福利一区视频在线观看| 久久久久久一区二区三区| 成人免费视频a| 国产成人一区二| 午夜免费日韩视频| 亚洲欧洲一区二区三区在线观看| 韩国视频理论视频久久| 欧美成人中文字幕在线| 欧美极度另类性三渗透| 亚洲免费福利视频|