摘要:前言在安裝完成之后,我們通常會進入后臺,那么登錄自然是必不可少的一步,下面我們就來看看,織夢的登錄在源碼中是究竟如何完成的吧。
前言
在安裝完成之后,我們通常會進入后臺,那么登錄自然是必不可少的一步,下面我們就來看看,織夢的登錄在源碼中是究竟如何完成的吧。
過程首先,如果我們直接訪問域名/dede,那么程序走的肯定是index.php,文件源碼如下:
getUserID().".txt"; if(!file_exists($myIcoFile)) $myIcoFile = $defaultIcoFile; require(DEDEADMIN."/inc/inc_menu_map.php"); include(DEDEADMIN."/templets/index2.htm"); exit();
從源碼中不難看出,該頁面主要是起統(tǒng)領作用,包含了如下幾個文件:
/dede/config.php : 管理目錄配置文件
/include/dedetag.class.php : 模板類
/dede/inc/inc_menu_map.php : 菜單地圖
/dede/templates/index2.html : 后臺首頁模板
它的執(zhí)行順序分別為:
分別加載config.php和dedetag.class.php兩個文件
分別載入通用快捷菜單模板和當前用戶快捷菜單模板,該模板最終會顯示在登錄后的首頁的快捷操作欄中
最后載入菜單地圖和首頁模板
到此為止,你也許會問,那么程序是在哪里判斷登錄的呢?從index.php中貌似也沒有看到關于登錄的地方啊,為什么我輸入index.php而會直接跳轉(zhuǎn)到后面跟一堆參數(shù)的logo.php呢?別急,其實它就在config.php中,看下面源碼:
//獲得當前腳本名稱,如果你的系統(tǒng)被禁用了$_SERVER變量,請自行更改這個選項 $dedeNowurl = $s_scriptName = ""; $isUrlOpen = @ini_get("allow_url_fopen"); $dedeNowurl = GetCurUrl(); $dedeNowurls = explode("?", $dedeNowurl); $s_scriptName = $dedeNowurls[0]; $cfg_remote_site = empty($cfg_remote_site)? "N" : $cfg_remote_site; //檢驗用戶登錄狀態(tài) $cuserLogin = new userLogin(); if($cuserLogin->getUserID()==-1) { header("location:login.php?gotopage=".urlencode($dedeNowurl)); exit(); }
在上面代碼中,程序首先獲取了當前的腳本網(wǎng)址以及對其盡心拆解處理,然后實例化織夢的登錄類,根據(jù)當前用戶id來判斷用戶是否登錄,如果沒有,則跳轉(zhuǎn)到login.php,后面的一堆參數(shù)也就是之前的腳本網(wǎng)址urlencode之后的結(jié)果。
好,既然到了login.php了,那我們就繼續(xù)來看看,在login.php頁面中,是如何處理的吧。
login.php文件源碼大概可以分為以下幾塊:
分別載入全局配置文件和登錄類
檢測安裝目錄安全性,如果沒有寫入鎖文件,這里則再次寫入一次(雙保險),然后將兩個可執(zhí)行的php文件修改備注為php.bak,使其失去可執(zhí)行性,最后新增index.html文件,內(nèi)容為dir,增加安全性,這一切都是為了防止惡意用戶重復安裝,導致網(wǎng)站損壞。
//檢測安裝目錄安全性 if( is_dir(dirname(__FILE__)."/../install") ) { if(!file_exists(dirname(__FILE__)."/../install/install_lock.txt") ) { $fp = fopen(dirname(__FILE__)."/../install/install_lock.txt", "w") or die("安裝目錄無寫入權限,無法進行寫入鎖定文件,請安裝完畢刪除安裝目錄!"); fwrite($fp,"ok"); fclose($fp); } //為了防止未知安全性問題,強制禁用安裝程序的文件 if( file_exists("../install/index.php") ) { @rename("../install/index.php", "../install/index.php.bak"); } if( file_exists("../install/module-install.php") ) { @rename("../install/module-install.php", "../install/module-install.php.bak"); } $fileindex = "../install/index.html"; if( !file_exists($fileindex) ) { $fp = @fopen($fileindex,"w"); fwrite($fp,"dir"); fclose($fp); } }
更新服務器
檢測后臺目錄是否更名,為了安全性,如果檢測到?jīng)]有更名,則會提示
登錄檢測 : 這一步就是檢測驗證碼,用戶名,和密碼,成功后跳轉(zhuǎn)到首頁
包含登錄頁面模板
那么,到此登錄就基本結(jié)束了,其中有兩個地方再說一下,一個是參數(shù)gotopage和另一個dohost,這兩個參數(shù)或變量均在login.html中可以找到,具體詳細流程大家可自行研究,關于gotopage,為了安全性,在login.html中可以看到,此處用了removeXSS函數(shù),防止xxs攻擊:
總結(jié)
殊途同歸,登錄無非就是判斷登錄狀態(tài)=》沒有登錄則跳轉(zhuǎn)到登錄頁面=》登錄了則跳轉(zhuǎn)到首頁,剩下的基本就是參數(shù)處理和表單驗證了,把握好核心,一切都能隨心。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/22104.html
摘要:前言之前寫的織夢源碼解析之程序安裝一文中,還有幾個值得講解的文件沒有提到,這里說明一下??偨Y(jié)安裝文件,到此真的結(jié)束了。 前言 之前寫的《dedecms5.7(織夢)源碼解析之程序安裝》一文中,還有幾個值得講解的文件沒有提到,這里說明一下。 代碼 templates目錄 該文件夾中,一共有step-1.html、step-2.html、step-3.html、step-4.html、st...
摘要:前言眾所周知,在第一次運行時會檢測是否安裝,如果沒有,則自動跳轉(zhuǎn)到安裝界面,進行用戶友好的安裝步驟,下面我們就來從源碼看看這一切是如何完成的。總結(jié)安裝的話,到此結(jié)束了,基本都是接收表單參數(shù),操作文件和數(shù)據(jù)庫的東西。 前言 眾所周知,dedecms在第一次運行時會檢測是否安裝,如果沒有,則自動跳轉(zhuǎn)到安裝界面,進行用戶友好的安裝步驟,下面我們就來從源碼看看這一切是如何完成的。 代碼 默認服...
摘要:一般來說,空間都是支持偽靜態(tài)的。服務器偽靜態(tài)相對簡單,直接在文件中加入相應偽靜態(tài)規(guī)則即可而服務器偽靜態(tài)的實現(xiàn),則需要加載組件,然后配置文件。 操作如下:1、后臺-系統(tǒng)參數(shù)-核心設置-是否使用偽靜態(tài):選擇是;注:你的網(wǎng)站空間是否支持偽靜態(tài),你可以與空間的IDC商聯(lián)系一 下,如果是自己的服務器,那就更好辦了,自己動手,豐衣足食。一般來說,空間都是支持偽靜態(tài)的。Apache服務器偽靜態(tài)相對簡...
閱讀 2728·2021-11-11 17:21
閱讀 619·2021-09-23 11:22
閱讀 3583·2019-08-30 15:55
閱讀 1646·2019-08-29 17:15
閱讀 580·2019-08-29 16:38
閱讀 913·2019-08-26 11:54
閱讀 2513·2019-08-26 11:53
閱讀 2756·2019-08-26 10:31