婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 網站建設 > 建站知識 > 織夢中cookie和session的應用

織夢中cookie和session的應用

POST TIME:2020-04-11 21:48

織夢中用到了cookie和session,在織夢后臺用的是session,在會員系統首頁用的是cookie,前臺和后臺用到的驗證碼是通過session來實現驗證的,我們先從織夢后臺開始分析,織夢系統中的session的應用。

當我們打開后臺,通過抓取頭文件,如下圖所示。

通過上圖我們可以看到,已經創建了一個session 文件。我們分析一下織夢從打開后綴到登錄,程序都執行了哪些操作。

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

包含了common.inc.php文件,直接把驗證碼類也引入,同時,驗證碼初始化,我們打開驗證碼類看一下,你會發現在驗證碼初始化后,同時把驗證碼存入cookie中,這就是為什么在這個類中經常看到session_start()的影子。接著在配置

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

這句是用來判斷用戶是不是已經登錄了,如果沒有登錄,則轉到location里面的路徑。我們打開類文件userlogin.class.php,可以找到方法getUserID(),這個方法是用來判斷用戶id是不是存在,若存在,則返回這個id,否則返回-1。

因為沒有登錄,所以,程序會自動路出config.php,并轉到http://localhost/dede/login.php?gotopage=%2Fdedecms%2Fdede%2F這里,即后臺登錄界面,程序也就轉到了login.php文件,這個文件正是處理用戶提交的用戶名和密碼,還有驗證碼的。

這個login.php對應的模板文件是login.htm,就是我們看到的界面,當我們寫上用戶名、密碼和驗證碼后,點提交,這些數據將被提交到login.php文件,在62行我們看到代碼if($dopost=='login'),用來處理當提交了后,難證用戶名、密碼和驗證碼的。

要注意的是:我們在做這樣的類似的用戶驗證功能時,最好先驗證一下驗證碼,因為驗證碼是通過cookie來實現驗證的,而用戶名和密碼則要查詢數據庫,如果驗證碼不正確,白白查詢數據庫,浪費資源。織夢也是這樣做的,先通過函數GetCkVdValue()來驗證,然后,再通過checkUser($userid,$pwd)方法進行驗證。

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

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

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

這段代碼非常重要,特別是$cuserLogin->keepUser();這個方法的調用,這方法是為了“保持用戶的會話狀態”,也是把用戶的信息,寫到cookie里面的重要方法,只有執行了這個方法,才能使在我們再打開瀏覽器一個選項卡,再打開后臺,可以不用登錄直接進行網站后臺。

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

回過頭來我們再看一下,上面這段代碼中的$cuserLogin->keepUser();這句是如何實現把cookie寫入到session文件中的。$cuserLogin->keepUser()這個方法在文件類userlogin.class.php里面的第281行開始處。要讀懂這個文件,還要打開common.inc.php打到如下代碼。

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

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

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

通過這二個函數創建了cookie,這二個函數在cookie小助手cookie.helper.php里面定義的。

當登錄成功,程序直接調用模板index2.htm,進入后臺后,我們剛進入后臺看到的界面就是這個模板文件。

總結:當我們在地址欄輸入http://localhost/dede/按回車后,程序會打開http://localhost/dede/index.php文件,程序會從這個index.php首先進入到config.php里面,當執行代碼,執行到
$cuserLogin = new userLogin();
if($cuserLogin->getUserID()==-1)

若你沒有登錄過,則轉到login.php?gotopage=%2Fdedecms%2Fdede%2F界面,這時程序已經跳出config.php,而且此時,程序并沒有回到index.php文件里,因為,通過exit()跳到了login.php文件里了。當輸入的用戶名、密碼和驗證碼通過驗證后,程序又跳轉到index.php界面,即進入了后臺。

若已經登錄,又打開瀏覽器標簽,程序依然會進入到index.php里面,然后,進入到config.php里面,此時getUserID()的值不是-1,這是因為剛登錄后,程序已經通過session保存在服務器里了,所以,就不會跳轉到login.php頁面了,而是直接向下運行,裝載模板index2.htm,進入后臺首頁。

其它登錄驗證跟這個后臺的驗證類似,只是不像織夢這么復雜而已。


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

  • 400-1100-266
主站蜘蛛池模板: 思茅市| 蒙阴县| 蒙自县| 兴文县| 同仁县| 富民县| 黑水县| 特克斯县| 武冈市| 安仁县| 德兴市| 彭州市| 临沧市| 苏尼特左旗| 静乐县| 昔阳县| 道真| 顺平县| 东兰县| 井冈山市| 静安区| 延庆县| 嘉兴市| 兴山县| 沽源县| 林甸县| 牙克石市| 青岛市| 广水市| 永春县| 林芝县| 南漳县| 婺源县| 龙南县| 成武县| 阳高县| 丹寨县| 永昌县| 呼玛县| 寿光市| 绥德县|