問題來源
今天安裝一個應用,發(fā)現(xiàn)提示 Error session_start(): open(/var/lib/php/session error,,估計是找不到寫不了啥啥啥,。
于是我就去該路徑下去看看,果然沒有這個路徑,,就直接在php路徑下創(chuàng)建了session目錄,,問題得以解決。
SESSION 的數(shù)據(jù)保存在哪里呢,?
當然是在服務器端,,但不是保存在內(nèi)存中,而是保存在文件或數(shù)據(jù)庫中,。
默認情況下,,php.ini 中設置的 SESSION 保存方式是 files(session.save_handler = files),即使用讀寫文件的方式保存 SESSION 數(shù)據(jù),,而 SESSION 文件保存的目錄由 session.save_path 指定,,文件名以 sess_ 為前綴,,后跟 SESSION ID,如:sess_c72665af28a8b14c0fe11afe3b59b51b,。文件中的數(shù)據(jù)即是序列化之后的 SESSION 數(shù)據(jù)了,。
如果訪問量大,可能產(chǎn)生的 SESSION 文件會比較多,,這時可以設置分級目錄進行 SESSION 文件的保存,,效率會提高很多,設置方法為:session.save_path="N;/save_path",,N 為分級的級數(shù),,save_path 為開始目錄。
當寫入 SESSION 數(shù)據(jù)的時候,,PHP 會獲取到客戶端的 SESSION_ID,,然后根據(jù)這個 SESSION ID 到指定的 SESSION 文件保存目錄中找到相應的 SESSION 文件,不存在則創(chuàng)建之,,最后將數(shù)據(jù)序列化之后寫入文件,。讀取 SESSION 數(shù)據(jù)是也是類似的操作流程,對讀出來的數(shù)據(jù)需要進行解序列化,,生成相應的 SESSION 變量,。
Refs
|