Session 的工作機制
客戶端第一次訪問某服務器,為每個訪問者創建一個唯一的 id (UID),并基于這個 UID 來存儲變量。UID 存儲在 cookie 中,亦或通過 URL 進行傳導。
ssionID的生產算法原理如下:
hash_func = md5 / sha1 #可由php.ini配置 ssionID = hash_func(客戶端IP + 當前時間(秒)+ 當前時間(微妙)+ PHP自帶的隨機數生產器)
hash_func(*)中的數據采樣值的內容分析,多個用戶在同一臺服務器時所生產的ssionID重復的概率極低(至少為百萬份之一)。
黑客如果要猜出某一用戶的ssionID,則他也必須知道“客戶端IP、當前時間(秒、微妙)、隨機數”等數據方可模擬。
php.ini配置如下:
; Select a hash function for u in generating ssion ids.; Possible Values; 0 (MD5 128 bits); 1 (SHA-1 160 bits); This option may also be t to the name of any hash function supported by; the hash extension. A list of available hashes is returned by the hash_algos(); function.; http://php.net/ssion.hash-functionssion.hash_function=0PHP ssion工作原理
ssion 技術相當于Cookie技術的升級版,Cookie的工作機制是將信息記錄在客戶端,而Session技術是將信息存放在服務器端,服務器存儲信息的方式有很多,可以是文件、數據庫和內存等,這里以文件的存儲方式介紹ssion的工作步驟。
(1)客戶端第一次訪問某服務器。(2)服務器通過Cookie發送ssionID給客戶端,并在服務器建立一個與ssionID同名的文件用于存儲信息,而ssionID不能重復,即不同的客戶端的ssionID是不同的。(3)客戶端再次訪問服務器時會攜帶服務器發送給客戶端的ssionID。(4)服務器根據客戶端發送的ssionID查找對應的文件,讀取文件內容。
通過上面的步驟可以看出,ssion的工作依賴cookie的工作,當然不用Cookie也可以實現ssionID的傳遞,如URL,但是用cookie最方便。
PHP本身的ssion是如何工作的呢
首先,在需要共享客戶端信息的文件中通過ssion_start()函數開啟ssion, 然后就可以向$_SESSION全局數組中存入或讀取數據,而$_SESSION數組與其他數組不同的是,當向該數組中添加數據時,PHP還會將其中的數據系列化寫入ssion文件中,每次開啟ssion時,PHP會將ssion文件中的數據讀取到該全局數組中,實現數據共享的功能。
php_cli模式通過ssion_id()使用ssion可以通過它來獲取當前會話的PHPSESSID,也可以通過它來設置當前的會話PHPSESSID。 php_cli模式下可以通過設置這個,達到使用ssion的目的,非常方便。
例如:
<?php// ssion_id('vingbrv8m64asth0nhplu9gmb7');ssion_start();$_SESSION[md5(rand(100,999))] = rand(100,999);var_dump($_SESSION);
下面看看一個實際例子,助你加強對ssion的認識
//SESSION初始化的時候調用function open($save_path, $ssion_name){ global $ss_save_path; $ss_save_path = $save_path; return(true);}//關閉的時候調用function clo(){ return(true);}function read($id){ global $ss_save_path; $ss_file = "$ss_save_path/ss_$id"; return (string) @file_get_contents($ss_file);}//腳本執行結束之前,執行寫入操作function write($id, $ss_data){ echo "sdfsf"; global $ss_save_path; $ss_file = "$ss_save_path/ss_$id"; if ($fp = @fopen($ss_file, "w")) { $return = fwrite($fp, $ss_data); fclo($fp); return $return; } el { return(fal); }}function destroy($id){ global $ss_save_path; $ss_file = "$ss_save_path/ss_$id"; return(@unlink($ss_file));}function gc($maxlifetime){ global $ss_save_path; foreach (glob("$ss_save_path/ss_*") as $filename) { if (filemtime($filename) + $maxlifetime < time()) { @unlink($filename); } } return true;}補充--涉及到的函數
ssion_start();// 開啟ssion回話,其中ssion_id()的值是一次獨立會話的標志ssion_name(); // 默認是PHPSESSID,在php.ini文件中可以自行配置。ssion_id(); // 在cookie中的體現是,ssion_name為鍵,ssion_id為值tcookie(); // 要想起作用,必須有頁面的刷新ssion_destory(); // ssion_destroy — 銷毀一個會話中的全部數據
本文發布于:2023-02-28 20:00:00,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/167764936876459.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:php session(php session cookie區別).doc
本文 PDF 下載地址:php session(php session cookie區別).pdf
| 留言與評論(共有 0 條評論) |