天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

解析php中session的實現原理以及大網站應用應注意的問題

php SESSION原理
我們知道,session是在服務器端保持用戶會話數據的一種方法,對應的cookie是 在客戶端保持用戶數據。HTTP協議是一種無狀態協議,服務器響應完之后就失去了與瀏覽器的聯系,最早,NETscape將cookie引入瀏覽器,使得 數據可以客戶端跨頁面交換,那么服務器是如何記住眾多用戶的會話數據呢?

首先要將客戶端和服務器端建立一一聯系,每個客戶 端都得有一個唯一標識,這樣服務器才能識別出來。建議唯一標識的方法有兩種:cookie或者通過GET方式指定。默認配置的php使用session的 時會建立一個名叫”phpSESSID”的cookie(可以通過php.ini修改session.name值指定),如果客戶端禁用cookie,你 也可以指定通過GET方式把session id傳到服務器(修改php.ini中session.use_trans_sid等參數)。

我們查看服務器端session.save_path目錄會發現很多類似sess_vv9lpgf0nmkurgvkba1vbvj915這樣的文件,這個 其實就是session id “vv9lpgf0nmkurgvkba1vbvj915″對應的數據。真相就在這里,客戶端將session id傳遞到服務器服務器根據session id找到對應的文件,讀取的時候對文件內容進行反序列化就得到session的值,保存的時候先序列化再寫入。

事實就是這 樣,所以如果服務器不支持session或者你想自定義session,完全可以DIY,通過php的uniqid生成永不重復的session id,然后找個地方存儲session的內容即可,你也可以學flickr把session存儲在MySQL數據庫中。

使用session之前為什么必須先執行session_start()?
了 解的原理之后,所謂的session其實就是客戶端一個session id服務器端一個session file,新建session之前執行session_start()是告訴服務器要種一個cookie以及準備好session文件,要不然你的 session內容怎么存;讀取session之前執行session_start()是告訴服務器,趕緊根據session id把session文件反序列化。

只有一個session函數可以在session_start()之前執行,session_name():讀取或指定session名稱(比如默認的就是”phpSESSID”),這個當然要在session_start之前執行。

session影響系統性能
session 在大訪問量網站上確實影響系統性能,影響性能的原因之一由文件系統設計造成,在同一個目錄下超過10000個文件時,文件的定位將非常耗時,php支持 session目錄hash,我們可以通過修改php.ini中session.save_path = “2;/path/to/session/dir”,那么session將存儲在兩級子目錄中,每個目錄有16個子目錄[0~f],不過好像php session不支持創建目錄,你需要事先把那么些目錄創建好 。

還有一個問題就是小文件的效率問題,一般我們的 session數據都不會太大(1~2K),如果有大量這樣1~2K的文件在磁盤上,IO效率肯定會很差,php手冊上建議使用Reiserfs文件系 統,不過Reiserfs的前景堪憂,Reiserfs的作者把媳婦給殺了,SuSE也拋棄了Reiserfs。

其實還有很多中 存儲session的方式,可以通過php -i|grep “Registered save handlers”查看,比如Registered save handlers => files user sqlite eaccelerator可以通過文件、用戶、sqlite、eaccelerator來存,如果服務器裝了memcached,還有會mmcache的 選項。當然還有很多,比如MySQL、PostgreSQL等等。都是不錯的選擇。

session的同步
我們前端可能有很多臺服務器,用戶在A服務器上登錄了,種下了session信息,然后訪問網站的某些頁面沒準跳到B服務器上去了,如果這個時候B服務器上沒有session信息又沒有做特殊處理,可能就會出問題了。
session同步有很多種,如果你是存儲在memcached或者MySQL中,那就很容易了,指定到同樣的位置即可,如果是文件形式的,你可以用NFS統一存儲

還有一種方式是通過加密的cookie來實現,用戶在A服務器上登錄成功,在用戶的瀏覽器上種上一個加密的cookie,當用戶訪問B服務器時,檢查有無 session,如果有當然沒問題,如果沒有,就去檢驗cookie是否有效,cookie有效的話就在B服務器上重建session。這種方法其實很有 用,如果網站有很多個子頻道,服務器也不在一個機房,session沒辦法同步又想做統一登錄那就太有用了。

當然還有一種方法就 是在負載均衡那一層保持會話,把訪問者綁定在某個服務器上,他的所有訪問都在那個服務器上就不需要session同步了,這些都是運維層面的東西。就說這 么多吧,根據自己的應用來選擇使用session,不要因為大家都說session影響系統性能就畏首畏尾,知道問題,解決問題才是關鍵,惹不起躲得起不適合這里。

php技術解析php中session的實現原理以及大網站應用應注意的問題,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲精品美女久久777777 | 亚洲精品久久国产高清 | 偷偷鲁青春草原视频分类 | 亚洲国产欧美国产综合在线 | 4399日本电影完整版在线观看免费 | 扒开老师大腿猛进AAA片软件 | 97亚洲狠狠色综合久久久久 | 国产久爱青草视频在线观看 | 久久免费精彩视频 | 久久青青草原精品国产软件 | 久久九九免费 | 国产亚洲精品久久久久久一区二区 | 99久酒店在线精品2019 | 色悠悠电影网 | 5G在线观看免费年龄确认18 | 国产在线观看不卡 | 国产成久久免费精品AV片天堂 | 最近日本MV字幕免费观看视频 | 国产精品久久人妻无码蜜 | 小学生偷拍妈妈视频遭性教育 | 综合亚洲桃色第一影院 | 国产成人在线播放视频 | 东京热一本无码av | 久久精品综合网中文字幕 | a级精品九九九大片免费看 A级韩国乱理伦片在线观看 | 国产成人免费视频 | 国产精品亚洲精品爽爽 | 亚洲欧美日韩国产另类电影 | 玩两个少妇女邻居 | 亚洲精品国产A久久久久久 亚洲精品国产AV成人毛片 | 国产成人无码精品久久久影院 | 九九热这里只有精品视频免费 | 国产超碰AV人人做人人爽 | 午夜亚洲WWW湿好爽 午夜亚洲WWW湿好大 | 神马电影dy888午夜我不卡 | 男女免费观看在线爽爽爽视频 | 九九热在线视频观看这里只有精品 | 国产精品JK白丝AV网站 | 国产三级多多影院 | 免费观看美女的网站 | 国产精品卡1卡2卡三卡四 |