摘要:一下大多是網上的資料,自己只是整理了下,如果有錯誤希望能指出,感謝中的相關配置先看下中的相關配置的解釋。啟用此設定可以防止有關通過傳遞會話的攻擊。值為表示直到關閉瀏覽器。例如意味著在每個請求中有的概率啟動進程。
對于session的了解,之前一直沒有仔細研究過,最近遇到了一些問題,需要解決session配置問題,就順便查看了些資料。一下大多是網上的資料,自己只是整理了下,如果有錯誤希望能指出,感謝!
PHP中session的相關配置先看下php.ini中session的相關配置的解釋。使用 php -i|grep "php.ini" 找到php.ini的文件目錄位置,下面是php.ini配置內容。參考官網:SESSION配置
[Session] ; 定義了來存儲和獲取與會話關聯(lián)的數(shù)據(jù)的處理器的名字。默認為 files ; Handler used to store/retrieve data. ; http://php.net/session.save-handler ; 也可以將session存入到redis,對應的key:PHPREDIS_SESSION:d7sq31qsvtcpsl6khacn068dg3 ; session.save_handler = redis session.save_handler = files ; session.save_path 定義了傳遞給存儲處理器的參數(shù)。如果選擇了默認的 files 文件處理器,則此值是創(chuàng)建文件的路徑。默認為 /tmp ; redis對應的設置 ; session.save_path = "tcp://127.0.0.1:6379?auth=123456" session.save_path = "/tmp" ; session.use_cookies 指定是否在客戶端用 cookie 來存放會話 ID。默認為 1(啟用)。 ; 如果為1的話,就可以在瀏覽器的Cookies中看到本次會話的sessionid session.use_cookies = 1
可以以chrome為例:
;指定是否在客戶端僅僅使用 cookie 來存放會話 ID。。啟用此設定可以防止有關通過 URL 傳遞會話 ID 的攻擊。此設定是 PHP 4.3.0 添加的。自PHP 5.3.0開始,默認值改為1(啟用) session.use_only_cookies = 1 ; Name of the session (used as cookie name). ; session.name 指定會話名以用做 cookie 的名字。只能由字母數(shù)字組成,默認為 PHPSESSID,對應session_name() session.name = PHPSESSID ; Initialize session on request startup. ; session.auto_start 指定會話模塊是否在請求開始時自動啟動一個會話。默認為 0(不啟動) session.auto_start = 0 ; session.cookie_lifetime 以秒數(shù)指定了發(fā)送到瀏覽器的 cookie 的生命周期。值為 0 表示“直到關閉瀏覽器”。默認為 0 ; Lifetime in seconds of cookie or, if 0, until browser is restarted. session.cookie_lifetime = 0 ; session.gc_probability 與 session.gc_divisor 合起來用來管理 gc(garbage collection 垃圾回收)進程啟動的概率。默認為 1 session.gc_probability = 1 ; session.gc_divisor 與 session.gc_probability 合起來定義了在每個會話初始化時啟動 gc(garbage collection 垃圾回收)進程的概率。此概率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味著在每個請求中有 1% 的概率啟動 gc 進程。session.gc_divisor 默認為 100。 session.gc_divisor = 1000 ; session.gc_maxlifetime 指定過了多少秒之后數(shù)據(jù)就會被視為“垃圾”并被清除。 垃圾搜集可能會在 session 啟動的時候開始( 取決于session.gc_probability 和 session.gc_divisor) ; After this number of seconds, stored data will be seen as "garbage" and ; cleaned up by the garbage collection process. session.gc_maxlifetime = 3600
; 指定是否啟用透明 SID 支持。默認為 0(禁用),比如可以使用url傳遞如果設置為1 session.use_trans_sid = 0session的生命周期
參考這兩篇文章:
如何設置一個嚴格30分鐘過期的Session
php會話(session)生命周期概念介紹及設置更改和回收
session是由服務端創(chuàng)建的,php程序中如果php.ini中沒有配置session.auto_start = 1的話,那么只有使用了session_start才會創(chuàng)建。
session_start() 會創(chuàng)建新會話或者重用現(xiàn)有會話。 如果通過 GET 或者 POST 方式,或者使用 cookie 提交了會話 ID, 則會重用現(xiàn)有會話。當會話自動開始或者通過 session_start() 手動開始的時候, PHP 內部會調用會話管理器的 open 和 read 回調函數(shù)。 會話管理器可能是 PHP 默認的, 也可能是擴展提供的(SQLite 或者 Memcached 擴展), 也可能是通過 session_set_save_handler() 設定的用戶自定義會話管理器。 通過 read 回調函數(shù)返回的現(xiàn)有會話數(shù)據(jù)(使用特殊的序列化格式存儲), PHP 會自動反序列化數(shù)據(jù)并且填充 $_SESSION 超級全局變量
嚴格控制30分鐘過期的Session
class Session{ /** * 設置session * @param [type] $name [description] * @param [type] $data [description] * @param integer $expire [description] */ public function set($name,$data,$expire = 300){ $sessionData = []; $sessionData["data"] = $data; $sessionData["expire"] = time() + $expire; $_SESSION[$name] = $sessionData; } /** * 獲取session * @param [type] $name [description] * @return [type] [description] */ public function get($name){ if(!isset($_SESSION[$name])){ return false; } if($_SESSION[$name]["expire"]>time()){ return $_SESSION[$name]["data"]; }else{ self::clear($name); } return false; } /** * 清除session * @param [type] $name [description] * @return [type] [description] */ private static function clear($name){ if(isset($_SESSION[$name])){ unset($_SESSION[$name]); } } }session的作用
(1)最常用的可能就是存放用戶的登錄信息了
(2)還有上面鳥哥說的存放優(yōu)惠券等等
(1)千萬不要在服務端使用setcookie()存放數(shù)據(jù),這樣很不安全
(2)session.auto_start = 0最好還是使用0,如果是提供api服務的話,會生成很多session,占用資源
擴展知識session一致性架構設計分布式session存儲
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/23025.html
摘要:為應用程序啟用會話狀態(tài)時,將檢查應用程序中每個頁面請求是否有瀏覽器發(fā)送的值。如果未提供任何值,則將啟動一個新會話,并將該會話的值隨響應一起發(fā)送到瀏覽器。 session 什么是session? session在計算機中,尤其在網絡應用中,稱為會話控制;具體到web中的session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏這個網站所花費的時間。...
第一種回答 那么, 最常見的一種回答是: 設置Session的過期時間, 也就是session.gc_maxlifetime, 這種回答是不正確的, 原因如下: 首先, 這個PHP是用一定的概率來運行session的gc的, 也就是session.gc_probability和session.gc_divisor(介紹參看 深入理解PHP原理之Session Gc的一個小概率Notice), 這...
摘要:警告通過函數(shù),可以檢索很多敏感數(shù)據(jù),例如以及其它函數(shù)。當開啟了安全模式,函數(shù)并不會執(zhí)行任何的權限檢測。返回當前進程所在的當前控制終端的路徑名返回值成功時,返回路徑名。返回值返回一個關聯(lián)數(shù)組,下標為定義的各種限制。 POSIX: 簡介: 該模塊包含了定義在 IEEE 1003.1(POSIX.1)標準文檔里的函數(shù)的接口,通過其它手段無法訪問。 警告:通過POSIX函數(shù),可以檢索很多敏感...
閱讀 3066·2023-04-25 18:54
閱讀 2591·2021-11-02 14:40
閱讀 3176·2021-09-23 11:58
閱讀 2424·2019-08-30 13:50
閱讀 1231·2019-08-29 12:46
閱讀 3117·2019-08-28 17:51
閱讀 679·2019-08-26 11:47
閱讀 897·2019-08-23 16:17