欧美成人片一区二区三区,久久碰人妻一区二区三区,久久婷婷激情综合色综合俺也去,狂野欧美性猛交免费视频,久久夜色精品国产亚洲

03
2018/08

PHP 項目實戰(zhàn)開發(fā)中,Session的原理及最佳實踐

發(fā)布時間:2018-08-03 18:21:04
發(fā)布者:pengyifeng
瀏覽量:
0

Session 的原理

session是在服務器端存儲數據的一種方法,對應的cookie是在客戶端保持用戶數據。為了在客戶端(比如瀏覽器)可以跨頁面交流數據,Netscape將cookie引入瀏覽器。所以,cookie是保存在瀏覽器端的。

服務器是如何來找到對應的sessionne呢,是使用全局變量$_COOKIE。所以說,服務器在接到(request)的時候通過這個$_COOKIE獲取客戶端的數據,然后又$_COOKIE來跟客戶端交流,將數據傳到客服端;相對于客戶端來說,通過$_COOKIE將想要存儲的數據發(fā)送給客戶端存儲,需要取出數據的時候,通過這個session來向服務器取數據,很方便的使用方法,但是cookie是有時效的所以說session也是有時效的。

那么客戶端如何記錄這么多的數據呢?首先就是需要瀏覽器跟服務器建立數據傳輸關系,使得每個客戶端都要一個唯一標示,這樣,服務器才能識別出來。建立唯一標識的方法是通過cookie或者通過GET方式在服務端建立session。php在使用session的時候,默認的會建立一個名叫"PHPSESSID"的cookie,值是唯一的,并在某個目錄下保存一個文件(文件名唯一由剛剛生成的那個cookie決定),然后發(fā)送給客戶端,客戶端在再次發(fā)送請求的時候,就會把這個名叫"PHPSESSID"的cookie帶過來,也就是$_COOKIE["PHPSESSID"],這個cookie的值不是session本身,而是一個session_id,一個和客戶端一一對應的id。

需要注意的是:

  • PHPSESSID這個名稱是可以配置的

  • ession保存的位置也是可以配置的通過php.ini中session.save_path設置,甚至,可以通過別的方式保存在數據庫或者緩存中

  • 在存session時限序列化,讀取的時候,先反序列化

這就是session的實現機制和原理。在機制不變的情況下,每個環(huán)節(jié)的實現方式幾乎都可以自定義。比如可以在這些方面實現自定義:

  • 如果客戶端不支持cookie,你也可以通過GET方式將session id發(fā)送到服務端

  • 如果你想改變唯一session_id的生成方式,你也可以選擇用uniqid

  • 你也可以改變session存放的路徑

  • 可以改變session文件的前綴,后綴

  • 甚至你可以把session存在數據庫,緩存當中

要想將session保存在別的媒介(比如緩存)需要先介紹一個接口:SessionHandlerInterface
可以通過實現這個接口,來自定義session的存貯方式,比如數據庫。當然,要實現一些基本的方法。

session簡介.jpg

Session的過期問題

ini_set('session.gc_maxlifetime', 3600); //設置時間 ini_get('session.gc_maxlifetime');//得到ini中設定值

超過這個gc_maxlifetime時間,session會被認為是garbage,有垃圾就有垃圾回收,但是垃圾回收的檢查卻不是每次都進行,而是按照一個幾率,分別是這兩個參數:

session.gc_probability = 1
session.gc_divisor = 1000

客戶端方面

主要和cookie的過期時間有關。php.ini中通過session.name = PHPSESSID來保存session的cookie名字默認為PHPSESSID(可以修改),那么可以設定這個cookie的過期時間來實現session的過期。

session.use_cookies = 1;

把這個的值設置為1,利用cookie來傳遞sessionid;

session.cookie_lifetime = 0

這個代表SessionID在客戶端Cookie儲存的時間,默認是0,代表瀏覽器一關閉sessionid就作廢。如果想使得PHPSESSID cookie永久有效,這個可以設為一個很大的值如999999999。另外也可以通過session_set_cookie_params()函數來設定PHPSESSID cookie的有效期


關鍵詞:
返回列表