明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

session全圖文詳細教程

[摘要]一、session概述session是什么,剛開始我也不明白,非專業(yè)詞典翻譯為會議,會議期。作個不太恰當?shù)谋扔靼桑m然不恰當,但意義卻是一樣的),,session是你和網(wǎng)站之間的感情。 sessio...
一、session概述

session是什么,剛開始我也不明白,非專業(yè)詞典翻譯為會議,會議期。作個不太恰當?shù)谋扔靼桑m然不恰當,但意義卻是一樣的),,session是你和網(wǎng)站之間的感情。
session在WEB技術(shù)中占有非常重要的份量。由于網(wǎng)頁是一種無狀態(tài)的連接程序,因此你無法得知用戶的瀏覽狀態(tài)。因此我們必須
通過session記錄用戶的有關(guān)信息,以供用戶再次以此身份對web服務(wù)器提供要求時作確認,例如,我們在某些網(wǎng)站中常常要求用戶登錄,
但我們怎么知道用戶已經(jīng)登錄了呢,如果沒有session的話,登錄信息是無法保留的,那豈不要讓用戶在每一頁網(wǎng)頁中都要提供
用戶名和密碼。
當然,session不光用于用戶身份認證功能,還可能用于其它方面,以后我們會提到的。
session用中文來解釋就是會話期。一個會話期開始于用戶輸入一個站點的網(wǎng)址時,結(jié)束于他離開這個站點時。
session最早出現(xiàn)在動態(tài)腳本語言Active Server Pages中,它的功能之強大,是一句話無法說清楚的。
當php還在3.0版本時,session是它永遠的痛。雖然php具有執(zhí)行速度快,使用靈活,功能強大等優(yōu)點,但因為session的問題,使
很多站點的開發(fā)放棄了php,至少我的老板是這樣認為的。當時有很多php免費函數(shù)庫提供在php3上實現(xiàn)session的方案,但都讓人感覺不正宗。
就好象你花好幾千大洋買的手機卻配置一個很粗糙的草作的袋子一樣,雖然功能是一樣的,但總讓人覺得別扭。php4的出現(xiàn)讓php在session問題上
有了翻身的機會。雖然它的session實現(xiàn)還不是很理想(主要是效率問題),但畢竟是它自己實現(xiàn)的,而且可以實際使用了。
那我們用session干什么呢,你說了半天,我用不上的話,你豈不有賣紙張之嫌。OK,我們來看看session有什么用:作過網(wǎng)站的人都有
這樣的體會,在一頁頁面中的變量(在本章都指服務(wù)器端變量,下同)是不能在下一頁中用的,雖然有一些辦法可以實現(xiàn),比如用form,urlstring等等
但有些對于用戶來說是不方便的,即使讓form自動提交,但其中的延時在現(xiàn)今的網(wǎng)絡(luò)狀況下足以讓人窒息,而這兩種方法都明顯加大程序員的負擔。如果你
正在開發(fā)一個大型項目,那這些額外的負擔是不能忽略的。而有了session就好辦了,session中注冊的變量可以作為全局變量使用。什么,全局變量?
好極了。這樣一來,你知道有什么用了吧:最主要的用于用戶身份認證,程序狀態(tài)記錄,頁面之間參數(shù)傳遞。
說了它這么半天的好處,你已經(jīng)動心了吧,先別高興,它還有缺點呢:它是用文件保存的變量(當然效率不高了,雖然可以用別的方式,但
很麻煩的),不能保存對象。與之相對的是,asp中的session可以保存對象變量,用內(nèi)存變量來保存session變量。但為什么我們還選用php呢,呵呵,
為什么,你能從本書的開始看到這章,想必你也應(yīng)該明白了吧,你還不明白,F(xiàn)aint,你再從頭看起吧,我保證你成為PHP專家^_^。
session是怎樣實現(xiàn)的呢?呵呵,你一定以為很高深吧,我來告訴你它的秘密。如果說只保存變量的話,很多讀者都明白,這是很簡單的,
但前面我們說過,http協(xié)議是一種無狀態(tài)的連接,你怎么知道那個變量是誰的,這個變量又是誰的呢?在session實現(xiàn)中用cookie實現(xiàn)的。cookie
存在于客戶端,也就是用戶的機器中,里面保存著用戶的session ID,也就是session號碼,當用戶的瀏覽器請求服務(wù)器時把session ID也一起送到
服務(wù)器,這樣服務(wù)器就可以識別你是誰,也就可以把變量識別開了。這樣我們就不難理解了,為什么有時session會失效了。不信的話,你可以試試:
在IE的"工具"菜單上有"Internet選項"菜單,打開后再選"安全"->"自定義級別",將安全設(shè)置中的"允許使用每個對話cookies"設(shè)為禁用,再看看
session能不能用。這下明白了吧!不過php4在linux/unix平臺上可以自動檢查cookies狀態(tài),當cookies 不可用時,自動會把session ID
附帶在url上進行傳遞。這是它在session方面比asp多的唯一的優(yōu)點了。

二、php3,4中session的實現(xiàn)

在php3中是沒有session這種東東的,但我們又需要,怎么辦呢?別急,有很多人替你做了這些,這其中最有名的要算phplib了。你可以去國外下
載,也可以上國內(nèi)大部分php站點下載。我們要做的第一件事是讓phplib和php3結(jié)合在一起使它能工作。為了能實現(xiàn)這方面的功能,我們需要先安裝phplib。
跟著我來做,很容易的(以下方法在win2000+php3.0.16+apache1.3.12+phplib7.2c+mysql3.23.21 for win32 上通過)
phplib最基本的功能包括用戶認證,Session管理,權(quán)限及數(shù)據(jù)庫的抽象化。
怎樣使用phplib來實現(xiàn)session功能呢?
一、首先你將phplib解開,里面有一個目錄叫"php",將這個目錄拷貝到apache的安裝目錄下。以下以筆者的機器為例:
我的apache安裝在d:apache 目錄下,我將上面的"php"目錄拷貝到d:apache,并將phplib下的pages目錄下的文件和目錄一起拷貝到
d:apachehtdocs下,注意不帶目錄本身。
phplib的類庫需要根據(jù)系統(tǒng)進行初始化,你可以修改local.inc文件,其中包含著一些基本參數(shù),你可以根據(jù)自己機器的實際情況來進行修改。
將d:apachephpprepend.php3文件中的一段程序改為如下樣子:

if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
$_PHPLIB["libdir"] = "d:/apache/php/"; //這兒改為你放phplib下php目錄的路徑
}

然后將d:apachephplocal.inc文件改如下:

class DB_Example extends DB_Sql {
var $Host = "localhost";//你的mysql數(shù)據(jù)庫所在主機名
var $Database = "test";//數(shù)據(jù)庫名
var $User = "root";//數(shù)據(jù)庫用戶名
var $Password = "";//數(shù)據(jù)庫用戶口令
}

最后一步執(zhí)行解開的phplib目錄中的stuff目錄下的create_database.mysql文件,生成初始表。
我們說明一下phplib的工作原理,每一個使用phplib的頁面首先必須可以找到運行phplib所必須類庫文件,我們可以在php3.ini中設(shè)置auto_prepend
變量來支持,phplib分發(fā)包中包含一個prepend.php3文件,將auto_prepend指定為"d:/apache/php/prepend.php3"(帶引號)后,各頁面就會自動包含phplib類庫,我們還可以
將phplib類庫所在目錄加進include變量中,以便可以找到這些文件,當然,最苯的辦法就是指定phplib的絕對路徑,這可不是個好主意,可移植性太差!
第二步,每一個使用phplib的頁面中,你必須首先調(diào)用page_open函數(shù)進行初始化。這會告訴phplib,你現(xiàn)在或?qū)頃玫綘顟B(tài)保存。一個典型的
page_open例子如下:



相關(guān)文章