最後更新:2016-06-01
來源:互聯網
上載者:User
關鍵字
教程
session
變數
實現
雖然
php
儲存
一、session概述
session是什麼,剛開始我也不明白,非專業詞典翻譯為會議,會議期。作個不太恰當的比喻吧 (雖然不恰當,但意義卻是一樣的),session是你和網站之間的感情。 session在WEB技術中佔有非常重要的份量。由於網頁是一種無狀態的串連程式,因此你無法得知使用者的瀏覽狀態。因此我們必須 通過session記錄使用者的有關資訊,以供使用者再次以此身份對web伺服器提供要求時作確認,例 如,我們在某些網站中常常要求使用者登入, 但我們怎麼知道使用者已經登入了呢,如果沒有session的話,登入資訊是無法保留的,那豈不要讓使用者在每一頁網頁中都要提供使用者名稱和密碼。
當然,session不光用於使用者身份認證功能,還可能用於其它方面,以後我們會提到的。 session用中文來解釋就是會話期。一個會話期開始於使用者輸入一個網站的網址時,結束於他離開這個網站時。session最早出現在動態指令碼語言Active Server Pages中,它的功能之強大,是一句話無法說清楚的。
當php還在3.0版本時,session是它永遠的痛。雖然php具有執行速度快,使用靈活,功能強大等優點,但因為session的問題,使很多網站的開發放棄了php,至少我的老闆是這樣認為的。當時有很多php免費函數庫提供在php3上實現session的方案,但都讓人感覺不正宗。就好象你花好幾千大洋買的手機卻配置一個很粗糙的草作的袋子一樣,雖然功能是一樣的,但總讓人覺得彆扭。php4的出現讓php在session問題上有了翻身的機會。雖然它的session實現還不是很理想(主要是效率問題),但畢竟是它自己實現的,而且可以實際使用了。 那我們用session幹什麼呢,你說了半天,我用不上的話,你豈不有賣紙張之嫌。OK,我們來看看session有什麼用:作過網站的人都有這樣的體會,在一頁頁面中的變數(在本章都指伺服器端變數,下同)是不能在下一頁中用的,雖然有一些辦法可以實現,比如用form,urlstring等等,但有些對於使用者來說是不方便的,即使讓form自動認可,但其中的延時在現今的網路狀況下足以讓人窒息,而這兩種方法都明顯加大程式員的負擔。如果你正在開發一個大型項目,那這些額外的負擔是不能忽略的。而有了session就好辦了,session中註冊的變數可以作為全域變數使用。什麼,全域變數? 好極了。這樣一來,你知道有什麼用了吧:最主要的用於使用者身份認證,程式狀態記錄,頁面之間參數傳遞。
說了它這麼半天的好處,你已經動心了吧,先別高興,它還有缺點呢:它是用檔案儲存的變數(當然效率不高了,雖然可以用別的方式,但很麻煩的),不能儲存對象。與之相對的是,asp中的session可以儲存物件變數,用記憶體變數來儲存session變數。但為什麼我們還選用php呢,呵呵, 為什麼,你能從本書的開始看到這章,想必你也應該明白了吧,你還不明白,Faint,你再從頭看起吧,我保證你成為PHP專家^_^。
session是怎樣實現的呢?呵呵,你一定以為很高深吧,我來告訴你它的秘密。如果說只儲存變數的話,很多讀者都明白,這是很簡單的,但前面我們說過,http協議是一種無狀態的串連,你怎麼知道那個變數是誰的,這個變數又是誰的呢?在session實現中用cookie實現的。cookie存在於用戶端,也就是使用者的機器中,裡面儲存著使用者的session ID,也就是session號碼,當使用者的瀏覽器請求伺服器時把session ID也一起送到伺服器,這樣伺服器就可以識別你是誰,也就可以把變數識別開了。這樣我們就不難理解了,為什麼有時session會失效了。不信的話,你可以試試: 在IE的"工具"菜單上有"Internet選項"菜單,開啟後再選"安全"->"自訂層級",將安全設定中的"允許使用每個對話cookies"設為禁用,再看看session能不能用。這下明白了吧!不過php4在linux/unix平台上可以自動檢查cookies狀態,當cookies 不可用時,自動會把session ID附帶在url上進行傳遞。這是它在session方面比asp多的唯一的優點了。