phpsession目錄
『壹』 為什麼設置php的session
一、介紹
PHP中session默認過期時間是1440S,超過這個時間沒有頁面刷新或者用戶關閉了瀏覽器,session就會失效。
二、設置
session文件存儲在伺服器端,通過保存在用戶端的SessionId與服務鍵液戚器進行交互,session的配置文件是php.ini,相關參數如下:
1.session.use_cookies = 1,默認1,代表SessionId通過cookie來傳遞,否則會用Query_String
2.session.name = PHPSESSID,默認PHPSESSID,代表SessionID儲存的變數名稱,可能是Cookie,也可能是Query_String來傳遞
3.session.cookie_lifetime = 604800,是SessionID在客戶端Cookie儲存的時間,默認是0,代表瀏覽器一關閉SessionID立即失效,這里我設置了7天
4.session.gc_maxlifetime = 604800,默認是1440,代表session在伺服器端保留的時間,超過這個時間就會失效。這里我設置了7天,與客戶端的cookie有效時間一致
三、其他情況
一般情況下把這四個值設置好之後就可以更改session的有效期了,但是當多個站點的session文件都保存在公用埋桐臨時路徑時,由於php的GC(Garbage Collector)機制,某個站點啟動垃圾回收機制,都會把公用臨時文件目錄下的文件全部清除,這就會導致稿陵session失效,解決方法就是更改php.ini里session文件的保存路徑:
session.save_path=『你的路徑』;
『貳』 求救:主機的php.ini中的session.save_path設置
php.ini中的session配置說明 下面介紹能讓session運行的必要配置步驟手動配置PHP運行環境時,最容易遺忘的一項是伺服器端session文件的存儲目錄配置工作,打開php.ini文件,搜索Session,找到session.save_path,默認值為/tmp,代表session文件保存在c:/tmp目錄下,默認tmp目錄並沒有創建,你可以在c盤下創建tmp目錄,或者創建一個其他目錄,比如leapsoulcn,再修改session.save_path的值,並去掉;,即session.save_path = 『/leapsoulcn』;注意事項:1、一般為了保證伺服器的安全,session.save_path值最好設置為外網無法訪問的目錄,另外如果你是在linux伺服器下進行session配置,請務必同時配置此目錄為可讀寫許可權,否則在執行session操作時會報錯。2、在使用session變數時,為了保證伺服器的安全性,最好將register_globals設置為off,以保證全局變數不混淆,在使用session_register()注冊session變數時,你可以通過系統全局變數$_SESSION來訪問,比如你注冊了leapsoulcn變數,你可以通過$_SESSION['leapsoulcn']來訪問此變數。session.save_path配置其他說明事項,從php.ini配置文件翻譯而來你可以使用」N;[MODE;]/path」這樣模式定義該路徑,N是一個整數,表示使用N層深度的子目錄,而不是將所有數據文件都保存在一個目錄下。[MODE;]可選,必須使用8進制數,默認600(=384),表示每個目錄下最多保存的會話文件數量。[MODE;]並不會改寫進程的umask。php不會自動創建這些文件夾結構。可使用ext/session目錄下的mod_files.sh腳本創建。如果該文件夾可以被不安全的用戶訪問(比如默認的」/tmp」),那麼將會帶來安全漏洞。當N>0時自動垃圾回收將會失效,具體參見下面有關垃圾搜集的部分。如果你伺服器上有多個虛擬主機,建議針對每個不同的虛擬主機分別設置各自不同的目錄。至此最基本的session配置就完成了,你只要保存php.ini,並重啟apache,即可使用session功能。其他session配置說明session.save_handler = 」files」默認以文件方式存取session數據,如果想要使用自定義的處理器來存取session數據,比如資料庫,用」user」。session.use_cookies = 1是否使用cookies在客戶端保存會話sessionid,默認為採用cookiessession.use_only_cookies = 0是否僅僅使用cookie在客戶端保存會話sessionid,這個選項可以使管理員禁止用戶通過URL來傳遞id,默認為0,如果禁用的話,客戶端如果禁用Cookie將使session無法工作。session.name = 「PHPSESSID」當做cookie name來使用的session標識名session.auto_start = 0是否自動啟動session,默認不啟動,我們知道在使用session功能時,我們基本上在每個php腳本頭部都會通過session_start()函數來啟動session,如果你啟動這個選項,則在每個腳本頭部都會自動啟動session,不需要每個腳本頭部都以session_start()函數啟動session,推薦關閉這個選項,採用默認值。session.cookie_lifetime = 0傳遞sessionid的Cookie有效期(秒),0表示僅在瀏覽器打開期間有效。session.gc_probability = 1session.gc_divisor = 100定義在每次初始化會話時,啟動垃圾回收程序的概率。計算公式如下:session.gc_probability/session.gc_divisor,比如1/100,表示有1%的概率啟動啟動垃圾回收程序,對會話頁面訪問越頻繁,概率就應當越小。建議值為1/1000~5000。session.gc_maxlifetime = 1440設定保存的session文件生存期,超過此參數設定秒數後,保存的數據將被視為』垃圾』並由垃圾回收程序清理。判斷標準是最後訪問數據的時間(對於FAT文件系統是最後刷新數據的時間)。如果多個腳本共享同一個session.save_path目錄但session.gc_maxlifetime不同,將以所有session.gc_maxlifetime指令中的最小值為准。如果你在session.save_path選項中設定使用子目錄來存儲session數據文件,垃圾回收程序不會自動啟動,你必須使用自己編寫的shell腳本、cron項或者其他辦法來執行垃圾搜集。比如設置」session.gc_maxlifetime=1440″ (24分鍾):cd /path/to/sessions; find -cmin +24 | xargs rm以上是一些常用的session配置選項說明,更多的session配置選項說明你可以參考php.ini文件中的說明。至此,在php.ini配置文件中對session進行配置的PHP教程就介紹完畢了,通過上面的步驟實踐與學習,基本的session功能都可以使用,至於session性能等其他方面則需要根據伺服器環境和需求進行微調了,這個得自己體會。
『叄』 php.ini中的session如何設置
php.ini設置參考項:
//處理session存取的模式
session.save_handler = files
//session檔案存放路徑
session.save_path = /tmp
//session使用cookie的功能,啟動: 1
session.use_cookies = 1
//session名字
session.name = PHPSESSID
//自動啟動;0:關;1:開啟
session.auto_start = 0
//session使用cookie的生存期,以秒為單位
session.cookie_lifetime = 0
『肆』 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資料庫中。
『伍』 PHP提高SESSION響應速度的方法有哪些
1、設置多級目錄存儲SESSION
默認session的存儲目錄是1級目錄,如果用戶量比較大,session文件數量就比較大,我們可以設置目錄數為2,使用2級目錄可以提交查找和存取速度。不過這種方式對速度的提升一般不是很明顯,可以通過修改php.ini,進而修改session存儲目錄數。
session.save_path = "2;/tmp"2、將SESSION存儲到redis中
php中的session默認是存儲在文件中的,支持redis存儲方式,因為redis的鍵值數據時存儲在內存中的,可以提高session的存取速度。
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"3、及時釋放SESSION文件鎖
我們在使用session時,需要先執行session_start()函數。
session_start()函數的作用如下:
判斷http請求是否包含名為PHPSESSID的cookie,如果沒有則創建該cookie並寫入到http響應的頭文件。
通過PHPSESSID查找對應的session文件,以讀寫方式打開的文件,然後讀取裡面的數據到內存。
然後我們一般會通過$_SESSION這個超全局變數,讀取或者設置session的值,我們操作的時候,session的值都是保存在內存中的,默認在頁面執行完畢之後,才會寫入到對應的文件中。
我們通過下面的一段代碼測試這個過程:
SESSION執行過程分析:
include "session_function.php";
//session_function.php代碼在附錄
session_start();
$_SESSION['name']="koastal";
echo "<br/>html content<br/>";
var_mp($_SESSION);
echo "<br/>";輸出結果:
open
read
html content
array (size=1)
'name' => string 'koastal' (length=7)
shutdown
write
close通過上面的例子可以發現,在頁面執行的過程中(頁面的執行過程是指將php文件解析為對應的html文件的耗時,而不是用戶在該頁面上的停留時間),session文件是被鎖定的。
推薦教程:PHP視頻教程
『陸』 php中session作用域的問題,如下圖,框架是library中的內容,現在給ad配一個域名,給admin配一個域名
在php中,伺服器端和客戶端之間的session是通過一個session_id來聯系($_COOKIE['PHPSESSID'],這個PHPSESSID可以通過session_name()修改),並且session數據是以普通文件的形式保存在一個特定的文件夾里。
所以說,只要是同一台伺服器,session數據目錄相同,且兩個域名使用了同一個session_id,那麼兩個域名就會共享session。
如果使用不同session的話,建議在兩個域名進入的時候先使用session_destroy()清除原有的session_id,然後再重新session_start()生成新的session_id,這樣就不會出現兩個站點共享session的情況了。