1. 介紹
1.1 作用:
主要用於服務器端的會話保持。
1.2 結構:
Session分以下幾部分:
1)Session id 用戶Session的唯一標識(隨機生成,具有唯一性,隨機性)
2)Session data 保存用戶狀態信息(用戶數據)
3)Session file Session的存儲方式,文件存儲方式以"sess_"前綴+"Session_id"后綴的方式存儲 格式如下: 1 sess_d3eom13a9r9p5i5nj923voqaf7
4)Session lifetime Session生存時間(從Session的產生到生命周期的結束)
1.3 工作原理:
1)客戶端與服務器建立聯系
2)客戶端將session id傳遞給服務器
3)服務器根據session id建立相應的session id文件(session id序列化保存,讀取時反序列化)
唯一標識的方法有兩種:cookie或者通過GET方式指定
1.4 缺點:
1)使用Session會影響系統性能(受文件系統設計影響,目錄定義超過10000個文件非常耗時)
2)Session文件大小1~2K,數量龐大的小文件影響硬盤IO性能
PS:此可以使用redis memcache的方式來共享session ,同時也解決了影響系統性能的問題
2.配置文件:
[Session]
session.save_handler = files #session的存儲方式
session.use_cookies= 1 #使用cookies在客戶端保存會話
session.use_only_cookies = 1 #去保護URL中傳送session id的用戶
session.name = PHPSESSID #session名稱(默認PHPSESSID)
session.auto_start = 0 #不啟用請求自動初始化session
session.cookie_lifetime = 0 #cookie存活時間(0為直至瀏覽器重啟,單位秒)
session.cookie_path = / #cookie的有效路徑
session.cookie_domain = #cookie的有效域名
session.cookie_httponly = #httponly標記增加到cookie上(腳本語言無法抓取)
session.serialize_handler = php #PHP標准序列化
session.gc_probability =1
session.gc_divisor =1000 #建議設置1000-5000 #概率=session.gc_probability/session.gc_divisor(1/1000 #頁面訪問越頻繁概率越小 session.gc_maxlifetime =1440 #過期時間(默認24分鍾,單位秒)
session.bug_compat_42 = off #全局初始化session變量
session.bug_compat_warn = off
session.referer_check = #防止帶有ID的外部URL
session.entopy_length = 0 #讀取的字節
session.cache_limiter = {nocache,private,pblic} #HTTP緩沖類型
session.cache_expire = 180 #文檔過期時間(分鍾)
session.use_trans_sid = 1 #trans_sid支持(默認0)
session.hash_function = 0 #hash方法{0:md5(128 bits),1:SHA-1(160 bits)}
session.hash_bits_per_character = 5 #當轉換二進制hash數據奧可讀形式是,每個字符保留位數
session.save_path = "/var/lib/php/session" #session id存放路徑
可以分層存放phpsession,更高效率的去查找session文件
格式: session.save_path = "N;MODE;/path"
-- N定義目錄層數(例如2,目錄需手動創建)
-- MODE定義單目錄最大會話文件數量(默認8進制600)
配置好之后,需要按自定義的目錄層數,需結合hash_bits_per_character參數來生成目錄結構
#!/bin/bash perl -e ' $dir="./phpsession"; @N=(0..9,"a".."z"); for $i (0..$#N) { mkdir "$dir/$N[$i]"; for $j (0..$#N) { mkdir "$dir/$N[$i]/$N[$j]"; for $k (0..$#N) { mkdir "$dir/$N[$i]/$N[$j]/$N[$k]"; } } }'
PS:
4 bits: 0-9, a-f
5 bits: 0-9, a-v
6 bits: 0-9, a-z, A-Z, "-", ","
