Session會話管理(PHP,Apacha)
Session存在的意義:為了解決HTTP是個無狀態協議所帶來的問題。
那怎麼解決呢?一張圖告訴你。
從圖中可以看出,Session是基於cookie來實現的,當某個使用者訪問伺服器上的某個指令碼程式時(比如apache中執行的PHP檔案),該指令碼程式會在啟動session的情況下自動生成一個隨機的字串,並將其作為cookie值返回到客戶端,並同時在服務上指定的目錄下建立一個session檔案儲存。
該session檔案也是有生命週期的,該session檔案的儲存位置,和生命週期都是可以進行設定的。
如下圖,在谷歌瀏覽器上可以看到儲存訪問的網站中有一個PHPSESSID的cookie,這個就是預設的sessionid(注意:PHPSESSID)這個名字在php.ini中是可以更改的。
如上圖,是伺服器中儲存的session檔案,通過在客戶端的cookie和伺服器上儲存的session檔案,伺服器就可以和客戶端模擬出一個會話了(其實是一個假會話,並不是像我們打電話一樣,一直都是相通的)
總上所述,其實我們自己也是可以寫一個"所謂的"會話管理的,只要利用cookie,和在服務端保持住一個我們自定義的隨機字串。
只不過session機制已經被伺服器實現了,我們開發者就可以省去了很多事。
而且,在PHP中,session機制是可以被定製,PHP開發了很多介面給開發者。通過這些介面可以配置session機制。
session.save_handler = files
定義了來儲存和獲取與會話關聯的資料的處理器的名字。預設為files
php內配置函式
設定使用者自定義 會話儲存函式。 如果想使用 PHP 內建的會話儲存機制之外的方式, 可以使用本函式。 例如,可以自定義會話儲存函式來將會話資料儲存到資料庫
session_set_save_handler()
www.cocoatest.com/sc/php/php/function.session-set-save-handler.html
session.save_path ="c:/wamp64/tmp"
定義了傳遞給儲存處理器的引數。如果選擇了預設的 files 檔案處理器,則此值是建立檔案的路徑。預設為/tmp。
PHP內部配置函式
session_save_path
www.cocoatest.com/sc/php/php/function.session-save-path.html
session.use_strict_mode = 0
session.use_cookies = 1
指定是否在客戶端用 cookie 來存放會話 ID。預設為1(啟用)。
session.use_only_cookies = 1
指定是否在客戶端僅僅使用 cookie 來存放會話 ID。。啟用此設定可以防止有關通過 URL 傳遞會話 ID 的攻擊。此設定是 PHP 4.3.0 新增的。
session.name = PHPSESSID
指定會話名以用做 cookie 的名字。只能由字母數字組成,預設為PHPSESSID。
PHP內部配置函式
session_name
www.cocoatest.com/sc/php/php/function.session-name.html
session.auto_start = 0
指定會話模組是否在請求開始時自動啟動一個會話。預設為0(不啟動)
session.cookie_lifetime = 0
以秒數指定了傳送到瀏覽器的 cookie 的生命週期。值為 0 表示“直到關閉瀏覽器”。預設為0。
php內部函式
獲取/設定會話 cookie 引數(注意:是會話cookie)
session_get_cookie_params()
www.cocoatest.com/sc/php/php/function.session-get-cookie-params.html
voidsession_set_cookie_params(int$lifetime[,string$path[,string$domain[,bool$secure= false[,bool$httponly= false]]]] )
www.cocoatest.com/sc/php/php/function.session-set-cookie-params.html
session.cookie_path = /
指定了要設定會話 cookie 的路徑。
詳細功能見上面
session.cookie_domain =
指定了要設定會話 cookie 的域名。預設為無,表示根據 cookie 規範產生 cookie 的主機名。
session.cookie_httponly =
Marks the cookie as accessible only through the HTTP protocol. This means that the cookie won't be accessible by scripting languages, such as JavaScript. This setting can effectively help to reduce identity theft through XSS attacks (although it is not supported by all browsers).
session.cookie_secure=off
指定是否僅通過安全連線傳送 cookie。預設為off。
session.serialize_handler = php
定義用來序列化/解序列化的處理器名字。當前支援 PHP 內部格式(名為php)和 WDDX(名為wddx)。如果 PHP 編譯時加入了WDDX 支援,則只能用 WDDX。預設為php。
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_divisor與session.gc_probability合起來定義了在每個會話初始化時啟動 gc(garbage collection 垃圾回收)程式的概率。此概率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味著在每個請求中有 1% 的概率啟動 gc 程式。session.gc_divisor預設為100。
session.gc_maxlifetime = 1440
指定過了多少秒之後資料就會被視為“垃圾”並被清除。
Note:
如果不同的指令碼具有不同的session.gc_maxlifetime數值但是共享了同一個地方儲存會話資料,則具有最小數值的指令碼會清理資料。此情況下,與session.save_path一起使用本指令。
Note:如果使用預設的基於檔案的會話處理器,則檔案系統必須保持跟蹤訪問時間(atime)。Windows FAT 檔案系統不行,因此如果必須使用 FAT 檔案系統或者其他不能跟蹤 atime 的檔案系統,那就不得不想別的辦法來處理會話資料的垃圾回收。自 PHP 4.2.3 起用 mtime(修改時間)來代替了 atime。因此對於不能跟蹤 atime 的檔案系統也沒問題了。
session.referer_check =
包含有用來檢查每個 HTTP Referer 的子串。如果客戶端傳送了 Referer 資訊但是在其中並未找到該子串,則嵌入的會話 ID 會被標記為無效。預設為空字串
session.cache_expire = 180
以分鐘數指定緩衝的會話頁面的存活期,此設定對 nocache 緩衝控制方法無效。預設為180。
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
有一些還沒有放上去,下面給出連結:
www.cocoatest.com/sc/php/php/session.configuration.html#ini.session.upload-progress.enabled
php.net/manual/zh/session.configuration.php#ini.session.referer-check
www.pureweber.com/article/how-session-works/
session_start();
session_id();
session_abort();
相關文章
- Session會話Session會話
- Oracle 會話(Session)Oracle會話Session
- PHP會話(Session)實現使用者登陸功能PHP會話Session
- Cassandra的Session會話Session會話
- 次世代的會話管理專案 Spring Session會話SpringSession
- PHP 會話(Session)如何實現使用者登陸功能PHP會話Session
- 會話技術之 Session會話Session
- oracle session(會話) 跟蹤OracleSession會話
- 【會話】Oracle kill session系列會話OracleSession
- 會話等待(Session Waits)會話SessionAI
- 【會話】V$SESSION檢視會話Session
- 會話層技術-session會話Session
- 10、flask-會話-sessionFlask會話Session
- 會話管理會話
- PHP系列(十三)PHP會話控制PHP會話
- 我的會話(session)在做什麼?會話Session
- 我的會話session在做什麼?會話Session
- 會話統計資訊session_pkg會話Session
- 令牌Token和會話Session原理與攻略會話Session
- ZooKeeper如何模擬會話失效(Session Expired)會話Session
- MQTT 持久會話與 Clean Session 詳解MQQT會話Session
- Session會話與Cookie簡單說明Session會話Cookie
- 檢視當前會話session id方法:會話Session
- session會話的底層實現方式Session會話
- 我的會話(session)在做什麼? (轉)會話Session
- WebService大講堂之Axis2(6):跨服務會話(Session)管理Web會話Session
- 批量kill殺死某些會話session的plsql會話SessionSQL
- oracle 會話(session)被鎖瞭解決方法Oracle會話Session
- PHP Session可能會引起併發問題PHPSession
- #魔術方法(會話管理)會話
- 會話技術 cookie和session 學習筆記會話CookieSession筆記
- Kill session 和orakill 殺會話及程式總結Session會話
- nodejs學習08——會話控制 session cookie tokenNodeJS會話SessionCookie
- WebRTC 系列之音訊會話管理Web音訊會話
- SQLServer會話數管理(轉貼)SQLServer會話
- 使用screen管理遠端會話會話
- oracle如何找出登入會話v$session的IP地址?Oracle會話Session
- Java Web(三) 會話機制,Cookie和Session詳解JavaWeb會話CookieSession