校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 網(wǎng)站建設(shè) > 建站知識(shí) > 織夢(mèng)中cookie和session的應(yīng)用

織夢(mèng)中cookie和session的應(yīng)用

POST TIME:2020-04-11 21:48

織夢(mèng)中用到了cookie和session,在織夢(mèng)后臺(tái)用的是session,在會(huì)員系統(tǒng)首頁(yè)用的是cookie,前臺(tái)和后臺(tái)用到的驗(yàn)證碼是通過(guò)session來(lái)實(shí)現(xiàn)驗(yàn)證的,我們先從織夢(mèng)后臺(tái)開(kāi)始分析,織夢(mèng)系統(tǒng)中的session的應(yīng)用。

當(dāng)我們打開(kāi)后臺(tái),通過(guò)抓取頭文件,如下圖所示。

通過(guò)上圖我們可以看到,已經(jīng)創(chuàng)建了一個(gè)session 文件。我們分析一下織夢(mèng)從打開(kāi)后綴到登錄,程序都執(zhí)行了哪些操作。

當(dāng)我們打開(kāi)后臺(tái)http://localhost/dede后,系統(tǒng)找到index.php文件,然后,在這個(gè)文件中引入后臺(tái)配置文件config.php,在這個(gè)配置文件里引入了“管理員登陸類(lèi)”,這個(gè)類(lèi)里面的第一句就session_start(),并且在配置文件里接著

包含了common.inc.php文件,直接把驗(yàn)證碼類(lèi)也引入,同時(shí),驗(yàn)證碼初始化,我們打開(kāi)驗(yàn)證碼類(lèi)看一下,你會(huì)發(fā)現(xiàn)在驗(yàn)證碼初始化后,同時(shí)把驗(yàn)證碼存入cookie中,這就是為什么在這個(gè)類(lèi)中經(jīng)常看到session_start()的影子。接著在配置

文件中運(yùn)行里面的程序,當(dāng)運(yùn)行到下面的代碼:
$cuserLogin = new userLogin();
if($cuserLogin->getUserID()==-1)
{
header("location:login.php?gotopage=".urlencode($dedeNowurl));
exit();
}

這句是用來(lái)判斷用戶是不是已經(jīng)登錄了,如果沒(méi)有登錄,則轉(zhuǎn)到location里面的路徑。我們打開(kāi)類(lèi)文件userlogin.class.php,可以找到方法getUserID(),這個(gè)方法是用來(lái)判斷用戶id是不是存在,若存在,則返回這個(gè)id,否則返回-1。

因?yàn)闆](méi)有登錄,所以,程序會(huì)自動(dòng)路出config.php,并轉(zhuǎn)到http://localhost/dede/login.php?gotopage=%2Fdedecms%2Fdede%2F這里,即后臺(tái)登錄界面,程序也就轉(zhuǎn)到了login.php文件,這個(gè)文件正是處理用戶提交的用戶名和密碼,還有驗(yàn)證碼的。

這個(gè)login.php對(duì)應(yīng)的模板文件是login.htm,就是我們看到的界面,當(dāng)我們寫(xiě)上用戶名、密碼和驗(yàn)證碼后,點(diǎn)提交,這些數(shù)據(jù)將被提交到login.php文件,在62行我們看到代碼if($dopost=='login'),用來(lái)處理當(dāng)提交了后,難證用戶名、密碼和驗(yàn)證碼的。

要注意的是:我們?cè)谧鲞@樣的類(lèi)似的用戶驗(yàn)證功能時(shí),最好先驗(yàn)證一下驗(yàn)證碼,因?yàn)轵?yàn)證碼是通過(guò)cookie來(lái)實(shí)現(xiàn)驗(yàn)證的,而用戶名和密碼則要查詢數(shù)據(jù)庫(kù),如果驗(yàn)證碼不正確,白白查詢數(shù)據(jù)庫(kù),浪費(fèi)資源。織夢(mèng)也是這樣做的,先通過(guò)函數(shù)GetCkVdValue()來(lái)驗(yàn)證,然后,再通過(guò)checkUser($userid,$pwd)方法進(jìn)行驗(yàn)證。

其中GetCkVdValue()在“系統(tǒng)核心函數(shù)存放文件”common.inc.php里面,在這個(gè)文件的最后,我們就可以找到。checkUser($userid,$pwd)方法在“管理員登陸類(lèi)”類(lèi)文件userlogin.class.php里面約240行,如果用戶名和密碼正確,則返回1,否則返回-1。

若用戶名正確,則執(zhí)行下面的這段代碼:

//success
if($res==1)
{
$cuserLogin->keepUser();
if(!empty($gotopage))
{
ShowMsg('成功登錄,正在轉(zhuǎn)向管理管理主頁(yè)!',$gotopage);
exit();
}
else
{
ShowMsg('成功登錄,正在轉(zhuǎn)向管理管理主頁(yè)!',"index.php");
exit();
}
}

這段代碼非常重要,特別是$cuserLogin->keepUser();這個(gè)方法的調(diào)用,這方法是為了“保持用戶的會(huì)話狀態(tài)”,也是把用戶的信息,寫(xiě)到cookie里面的重要方法,只有執(zhí)行了這個(gè)方法,才能使在我們?cè)俅蜷_(kāi)瀏覽器一個(gè)選項(xiàng)卡,再打開(kāi)后臺(tái),可以不用登錄直接進(jìn)行網(wǎng)站后臺(tái)。

這也是下一次打開(kāi)后臺(tái)路徑后,在config.php里面進(jìn)行判斷用戶是不是已經(jīng)登錄,也就是getUserID()是不是等于-1,即if($cuserLogin->getUserID()==-1)的重要依據(jù)。

回過(guò)頭來(lái)我們?cè)倏匆幌拢厦孢@段代碼中的$cuserLogin->keepUser();這句是如何實(shí)現(xiàn)把cookie寫(xiě)入到session文件中的。$cuserLogin->keepUser()這個(gè)方法在文件類(lèi)userlogin.class.php里面的第281行開(kāi)始處。要讀懂這個(gè)文件,還要打開(kāi)common.inc.php打到如下代碼。

這里在大于php5.4以上的版本的前提下定義了三個(gè)函數(shù),分別是創(chuàng)建session值的函數(shù)session_register(),判斷是否已經(jīng)設(shè)置了session值的函數(shù)session_is_registered()和銷(xiāo)毀session的函數(shù),session_unregister()。這樣無(wú)論你的php版本無(wú)論是哪一個(gè),都可以用函數(shù)session_register()了,織夢(mèng)幫我們想的非常周到!

回到函數(shù)keepUser()里面,在函數(shù)里面不僅創(chuàng)建了很多session,例如$_SESSION[$this->keepUserIDTag] = $this->userID;還創(chuàng)建了cookie,

PutCookie('DedeUserID', $this->userID, 3600 * 24, '/');
PutCookie('DedeLoginTime', time(), 3600 * 24, '/');

通過(guò)這二個(gè)函數(shù)創(chuàng)建了cookie,這二個(gè)函數(shù)在cookie小助手cookie.helper.php里面定義的。

當(dāng)?shù)卿洺晒Γ绦蛑苯诱{(diào)用模板index2.htm,進(jìn)入后臺(tái)后,我們剛進(jìn)入后臺(tái)看到的界面就是這個(gè)模板文件。

總結(jié):當(dāng)我們?cè)诘刂窓谳斎雋ttp://localhost/dede/按回車(chē)后,程序會(huì)打開(kāi)http://localhost/dede/index.php文件,程序會(huì)從這個(gè)index.php首先進(jìn)入到config.php里面,當(dāng)執(zhí)行代碼,執(zhí)行到
$cuserLogin = new userLogin();
if($cuserLogin->getUserID()==-1)

若你沒(méi)有登錄過(guò),則轉(zhuǎn)到login.php?gotopage=%2Fdedecms%2Fdede%2F界面,這時(shí)程序已經(jīng)跳出config.php,而且此時(shí),程序并沒(méi)有回到index.php文件里,因?yàn)椋ㄟ^(guò)exit()跳到了login.php文件里了。當(dāng)輸入的用戶名、密碼和驗(yàn)證碼通過(guò)驗(yàn)證后,程序又跳轉(zhuǎn)到index.php界面,即進(jìn)入了后臺(tái)。

若已經(jīng)登錄,又打開(kāi)瀏覽器標(biāo)簽,程序依然會(huì)進(jìn)入到index.php里面,然后,進(jìn)入到config.php里面,此時(shí)getUserID()的值不是-1,這是因?yàn)閯偟卿浐螅绦蛞呀?jīng)通過(guò)session保存在服務(wù)器里了,所以,就不會(huì)跳轉(zhuǎn)到login.php頁(yè)面了,而是直接向下運(yùn)行,裝載模板index2.htm,進(jìn)入后臺(tái)首頁(yè)。

其它登錄驗(yàn)證跟這個(gè)后臺(tái)的驗(yàn)證類(lèi)似,只是不像織夢(mèng)這么復(fù)雜而已。


收縮
  • 微信客服
  • 微信二維碼
  • 電話咨詢

  • 400-1100-266
主站蜘蛛池模板: 遵义县| 清丰县| 平度市| 丰宁| 新野县| 建瓯市| 靖远县| 荣昌县| 西乌珠穆沁旗| 湾仔区| 清苑县| 达尔| 化州市| 舟山市| 宜昌市| 区。| 堆龙德庆县| 双峰县| 安丘市| 盐亭县| 杨浦区| 建昌县| 陇川县| 阿荣旗| 肥东县| 小金县| 永城市| 崇信县| 盘山县| 华容县| 沛县| 克拉玛依市| 揭阳市| 富平县| 无为县| 财经| 泗阳县| 镇安县| 罗平县| 贡嘎县| 弋阳县|