激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

php中session的實(shí)現原理以及大網(wǎng)站應用應注意的問(wèn)題分析

時(shí)間:2024-07-26 10:54:55 PHP 我要投稿
  • 相關(guān)推薦

php中session的實(shí)現原理以及大網(wǎng)站應用應注意的問(wèn)題分析

  PHP SESSION原理

  我們知道,session是在服務(wù)器端保持用戶(hù)會(huì )話(huà)數據的一種方法,對應的cookie是 在客戶(hù)端保持用戶(hù)數據。HTTP協(xié)議是一種無(wú)狀態(tài)協(xié)議,服務(wù)器響應完之后就失去了與瀏覽器的聯(lián)系,最早,Netscape將cookie引入瀏覽器,使得 數據可以客戶(hù)端跨頁(yè)面交換,那么服務(wù)器是如何記住眾多用戶(hù)的會(huì )話(huà)數據呢?

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

  我們查看服務(wù)器端session.save_path目錄會(huì )發(fā)現很多類(lèi)似sess_vv9lpgf0nmkurgvkba1vbvj915這樣的文件,這個(gè) 其實(shí)就是session id “vv9lpgf0nmkurgvkba1vbvj915″對應的數據。真相就在這里,客戶(hù)端將session id傳遞到服務(wù)器,服務(wù)器根據session id找到對應的文件,讀取的時(shí)候對文件內容進(jìn)行反序列化就得到session的值,保存的時(shí)候先序列化再寫(xiě)入。

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

  使用session之前為什么必須先執行session_start()?

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

  只有一個(gè)session函數可以在session_start()之前執行,session_name():讀取或指定session名稱(chēng)(比如默認的就是”P(pán)HPSESSID”),這個(gè)當然要在session_start之前執行。

  session影響系統性能

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

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

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

  session的同步

  我們前端可能有很多臺服務(wù)器,用戶(hù)在A(yíng)服務(wù)器上登錄了,種下了session信息,然后訪(fǎng)問(wèn)網(wǎng)站的某些頁(yè)面沒(méi)準跳到B服務(wù)器上去了,如果這個(gè)時(shí)候B服務(wù)器上沒(méi)有session信息又沒(méi)有做特殊處理,可能就會(huì )出問(wèn)題了。

  session同步有很多種,如果你是存儲在memcached或者M(jìn)ySQL中,那就很容易了,指定到同樣的位置即可,如果是文件形式的,你可以用NFS統一存儲。

  還有一種方式是通過(guò)加密的cookie來(lái)實(shí)現,用戶(hù)在A(yíng)服務(wù)器上登錄成功,在用戶(hù)的瀏覽器上種上一個(gè)加密的cookie,當用戶(hù)訪(fǎng)問(wèn)B服務(wù)器時(shí),檢查有無(wú) session,如果有當然沒(méi)問(wèn)題,如果沒(méi)有,就去檢驗cookie是否有效,cookie有效的話(huà)就在B服務(wù)器上重建session。這種方法其實(shí)很有 用,如果網(wǎng)站有很多個(gè)子頻道,服務(wù)器也不在一個(gè)機房,session沒(méi)辦法同步又想做統一登錄那就太有用了。

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

【php中session的實(shí)現原理以及大網(wǎng)站應用應注意的問(wèn)題分析】相關(guān)文章:

關(guān)于php堆排序實(shí)現原理與應用方法04-01

探討PHP函數的實(shí)現原理及性能04-01

挖掘機駕駛中應注意的問(wèn)題03-20

員工激勵過(guò)程中應注意的問(wèn)題12-01

素描應注意的問(wèn)題01-05

芭蕾舞大踢腿應注意的問(wèn)題03-17

PHP中的排序函數區別分析03-31

俄羅斯留學(xué)應注意的問(wèn)題02-23

美甲前應注意的問(wèn)題03-20

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频