明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

session全圖文說(shuō)明教程(一)

[摘要]一、session概述 session是什么,剛開(kāi)始我也不明白,非專(zhuān)業(yè)詞典翻譯為會(huì)議,會(huì)議期。作個(gè)不太恰當(dāng)?shù)谋扔靼?(雖然不恰當(dāng),但意義卻是一樣的),session是你和網(wǎng)站之間的感情。 session在WEB技術(shù)中占有非常重要的份量。由于網(wǎng)頁(yè)是一種無(wú)狀態(tài)的連接程序,因此你無(wú)法得知用戶(hù)的...
一、session概述

session是什么,剛開(kāi)始我也不明白,非專(zhuān)業(yè)詞典翻譯為會(huì)議,會(huì)議期。作個(gè)不太恰當(dāng)?shù)谋扔靼?
(雖然不恰當(dāng),但意義卻是一樣的),session是你和網(wǎng)站之間的感情。 session在WEB技術(shù)中占有非常重要的份量。由于網(wǎng)頁(yè)是一種無(wú)狀態(tài)的連接程序,因此你無(wú)法得知用戶(hù)的瀏覽狀態(tài)。因此我們必須
通過(guò)session記錄用戶(hù)的有關(guān)信息,以供用戶(hù)再次以此身份對(duì)web服務(wù)器提供要求時(shí)作確認(rèn),例
如,我們?cè)谀承┚W(wǎng)站中常常要求用戶(hù)登錄, 但我們?cè)趺粗烙脩?hù)已經(jīng)登錄了呢,如果沒(méi)有session的話(huà),登錄信息是無(wú)法保留的,那豈不要讓用戶(hù)在每一頁(yè)網(wǎng)頁(yè)中都要提供用戶(hù)名和密碼。


當(dāng)然,session不光用于用戶(hù)身份認(rèn)證功能,還可能用于其它方面,以后我們會(huì)提到的。 session用中文來(lái)解釋就是會(huì)話(huà)期。一個(gè)會(huì)話(huà)期開(kāi)始于用戶(hù)輸入一個(gè)站點(diǎn)的網(wǎng)址時(shí),結(jié)束于他離開(kāi)這個(gè)站點(diǎn)時(shí)。session最早出現(xiàn)在動(dòng)態(tài)腳本語(yǔ)言Active Server Pages中,它的功能之強(qiáng)大,是一句話(huà)無(wú)法說(shuō)清楚的。


當(dāng)php還在3.0版本時(shí),session是它永遠(yuǎn)的痛。雖然php具有執(zhí)行速度快,使用靈活,功能強(qiáng)大等優(yōu)點(diǎn),但因?yàn)閟ession的問(wèn)題,使很多站點(diǎn)的開(kāi)發(fā)放棄了php,至少我的老板是這樣認(rèn)為的。當(dāng)時(shí)有很多php免費(fèi)函數(shù)庫(kù)提供在php3上實(shí)現(xiàn)session的方案,但都讓人感覺(jué)不正宗。就好象你花好幾千大洋買(mǎi)的手機(jī)卻配置一個(gè)很粗糙的草作的袋子一樣,雖然功能是一樣的,但總讓人覺(jué)得別扭。php4的出現(xiàn)讓php在session問(wèn)題上有了翻身的機(jī)會(huì)。雖然它的session實(shí)現(xiàn)還不是很理想(主要是效率問(wèn)題),但畢竟是它自己實(shí)現(xiàn)的,而且可以實(shí)際使用了。 那我們用session干什么呢,你說(shuō)了半天,我用不上的話(huà),你豈不有賣(mài)紙張之嫌。OK,我們來(lái)看看session有什么用:作過(guò)網(wǎng)站的人都有這樣的體會(huì),在一頁(yè)頁(yè)面中的變量(在本章都指服務(wù)器端變量,下同)是不能在下一頁(yè)中用的,雖然有一些辦法可以實(shí)現(xiàn),比如用form,urlstring等等,但有些對(duì)于用戶(hù)來(lái)說(shuō)是不方便的,即使讓form自動(dòng)提交,但其中的延時(shí)在現(xiàn)今的網(wǎng)絡(luò)狀況下足以讓人窒息,而這兩種方法都明顯加大程序員的負(fù)擔(dān)。如果你正在開(kāi)發(fā)一個(gè)大型項(xiàng)目,那這些額外的負(fù)擔(dān)是不能忽略的。而有了session就好辦了,session中注冊(cè)的變量可以作為全局變量使用。什么,全局變量? 好極了。這樣一來(lái),你知道有什么用了吧:最主要的用于用戶(hù)身份認(rèn)證,程序狀態(tài)記錄,頁(yè)面之間參數(shù)傳遞。


說(shuō)了它這么半天的好處,你已經(jīng)動(dòng)心了吧,先別高興,它還有缺點(diǎn)呢:它是用文件保存的變量(當(dāng)然效率不高了,雖然可以用別的方式,但很麻煩的),不能保存對(duì)象。與之相對(duì)的是,asp中的session可以保存對(duì)象變量,用內(nèi)存變量來(lái)保存session變量。但為什么我們還選用php呢,呵呵, 為什么,你能從本書(shū)的開(kāi)始看到這章,想必你也應(yīng)該明白了吧,你還不明白,F(xiàn)aint,你再?gòu)念^看起吧,我保證你成為PHP專(zhuān)家^_^。


session是怎樣實(shí)現(xiàn)的呢?呵呵,你一定以為很高深吧,我來(lái)告訴你它的秘密。如果說(shuō)只保存變量的話(huà),很多讀者都明白,這是很簡(jiǎn)單的,但前面我們說(shuō)過(guò),http協(xié)議是一種無(wú)狀態(tài)的連接,你怎么知道那個(gè)變量是誰(shuí)的,這個(gè)變量又是誰(shuí)的呢?在session實(shí)現(xiàn)中用cookie實(shí)現(xiàn)的。cookie存在于客戶(hù)端,也就是用戶(hù)的機(jī)器中,里面保存著用戶(hù)的session ID,也就是session號(hào)碼,當(dāng)用戶(hù)的瀏覽器請(qǐng)求服務(wù)器時(shí)把session ID也一起送到服務(wù)器,這樣服務(wù)器就可以識(shí)別你是誰(shuí),也就可以把變量識(shí)別開(kāi)了。這樣我們就不難理解了,為什么有時(shí)session會(huì)失效了。不信的話(huà),你可以試試: 在IE的"工具"菜單上有"Internet選項(xiàng)"菜單,打開(kāi)后再選"安全"->"自定義級(jí)別",將安全設(shè)置中的"允許使用每個(gè)對(duì)話(huà)cookies"設(shè)為禁用,再看看session能不能用。這下明白了吧!不過(guò)php4在linux/unix平臺(tái)上可以自動(dòng)檢查cookies狀態(tài),當(dāng)cookies 不可用時(shí),自動(dòng)會(huì)把session ID附帶在url上進(jìn)行傳遞。這是它在session方面比asp多的唯一的優(yōu)點(diǎn)了。