中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

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

      時間:2024-07-26 10:54:55 PHP 我要投稿
      • 相關推薦

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

        PHP SESSION原理

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

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

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

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

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

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

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

        session影響系統(tǒng)性能

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

        還有一個問題就是小文件的效率問題,一般我們的 session數(shù)據(jù)都不會太大(1~2K),如果有大量這樣1~2K的文件在磁盤上,IO效率肯定會很差,PHP手冊上建議使用Reiserfs文件系 統(tǒng),不過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信息,然后訪問網(wǎng)站的某些頁面沒準跳到B服務器上去了,如果這個時候B服務器上沒有session信息又沒有做特殊處理,可能就會出問題了。

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

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

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

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

      關于php堆排序?qū)崿F(xiàn)原理與應用方法04-01

      探討PHP函數(shù)的實現(xiàn)原理及性能04-01

      挖掘機駕駛中應注意的問題03-20

      員工激勵過程中應注意的問題12-01

      素描應注意的問題01-05

      芭蕾舞大踢腿應注意的問題03-17

      PHP中的排序函數(shù)區(qū)別分析03-31

      俄羅斯留學應注意的問題02-23

      美甲前應注意的問題03-20

      主站蜘蛛池模板: 国产精品中文第一字幕| 国产无遮挡又黄又爽无VIP| 亚洲青涩在线不卡av| 海安县| 欧洲国产精品无码专区影院| 都匀市| 亚洲精品乱码久久久久久按摩高清| 洛阳市| 国产精品一区二区三区精品| 国产精品久久一区性色a| 中国免费一级毛片| 国产在线视频h| 国产一区二区三区免费在线视频| 国产精品呻吟一区二区三区 | 久久精品国产亚洲av桥本有菜| 视频精品熟女一区二区三区| 日本人妻高清一区二区三区| 中文字幕乱码免费在线视频| 日本高清在线播放一区二区三区| 亚洲中文字幕综合在线| 一区二区在线视频大片| 蜜桃在线播放免费一区二区三区| 蜜桃视频中文在线观看| 国产日韩欧美视频成人 | 亚洲成人av一区二区麻豆蜜桃| 亚洲一区二区在线视频中文字幕 | 国产精品毛片av久久| 博湖县| 精品国产爱在线观看| 亚洲欧洲AV综合色无码| 亚洲精品成人av一区二区| 国产精品一品二品有码| 色综合色综合久久综合频道| 一区二区久久精品66国产精品| 亚洲AV无码日韩综合欧亚| 国产三级三级三级看三级日本| 成人免费视频自偷自拍| 精品中文字幕一二三四区人妻| 威海市| 交城县| 国产精品一区二区三区色|