主頁 > 知識庫 > PHP中Session ID的實(shí)現(xiàn)原理實(shí)例分析

PHP中Session ID的實(shí)現(xiàn)原理實(shí)例分析

熱門標(biāo)簽:仁和怎么申請400開頭的電話 高德地圖標(biāo)注家 怎么向銷售公司推銷外呼系統(tǒng) 廣州防封卡外呼系統(tǒng)多少錢一個(gè)月 長春人工外呼系統(tǒng)服務(wù)商 哪里辦理400電話 外呼系統(tǒng)撥打暫時(shí)無法接通 廣東地市地圖標(biāo)注 江西手機(jī)自動(dòng)外呼防封系統(tǒng)是什么

本文實(shí)例講述了PHP中Session ID的實(shí)現(xiàn)原理。分享給大家供大家參考,具體如下:

Session 的工作機(jī)制是:為每個(gè)訪問者創(chuàng)建一個(gè)唯一的 id (UID),并基于這個(gè) UID 來存儲變量。UID 存儲在 cookie 中,亦或通過 URL 進(jìn)行傳導(dǎo)。

PHPSESSIONID的生產(chǎn)算法原理如下:

hash_func = md5 / sha1 #可由php.ini配置

PHPSESSIONID = hash_func(客戶端IP + 當(dāng)前時(shí)間(秒)+ 當(dāng)前時(shí)間(微妙)+ PHP自帶的隨機(jī)數(shù)生產(chǎn)器)

從以上hash_func(*)中的數(shù)據(jù)采樣值的內(nèi)容分析,多個(gè)用戶在同一臺服務(wù)器時(shí)所生產(chǎn)的PHPSESSIONID重復(fù)的概率極低(至少為百萬份之一),設(shè)想,但臺動(dòng)態(tài)Web Server能到2000/rps已經(jīng)很強(qiáng)悍了。

另外,黑客如果要猜出某一用戶的PHPSESSIONID,則他也必須知道“客戶端IP、當(dāng)前時(shí)間(秒、微妙)、隨機(jī)數(shù)”等數(shù)據(jù)方可模擬。

php.ini配置如下:

; Select a hash function for use in generating session ids.
; Possible Values
;  0 (MD5 128 bits)
;  1 (SHA-1 160 bits)
; This option may also be set 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/session.hash-function
session.hash_function=0

【PHP session工作原理】

以下以cookie傳輸PHPSESSID描述。

1. 客戶端請求一個(gè)php的服務(wù)端地址。

2. 服務(wù)端收到請求,此次php腳本中包含session_start()。

3. 服務(wù)端會生成一個(gè)PHPSESSID。(默認(rèn)session存儲方式為session.save_handler=files,文件形式存儲。生成的session文件名規(guī)則即為sess_PHPSESSID,session文件存在session.save_path中。)

4. 服務(wù)端響應(yīng)首部Response Headers:Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50; path=/。在客戶端生成一個(gè)cookie保存此PHPSESSID。

5. 此時(shí),客戶端的cookie里面包含了PHPSESSID,之后客戶端的每次請求首部Request Headers:Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50。服務(wù)端之后每次接收到客戶端的請求就都能根據(jù)這個(gè)

PHPSESSID來找到服務(wù)端的session文件,通過對這個(gè)session文件的讀寫操作即實(shí)現(xiàn)了session的超全局變量屬性。

如果客戶端禁用了cookie,由于無法使用cookie傳遞PHPSESSID,那么客戶端每次請求,服務(wù)端都會重新建立一個(gè)session文件,而無法通過通過PHPSESSID來重用session文件,所以session也就失效了。

這種情況可以設(shè)置session.use_trans_sid來傳輸PHPSESSID,具體實(shí)現(xiàn)方式與cookie的區(qū)別就是將PHPSESSID通過HTTP的GET傳輸。每次請求的地址里面都會補(bǔ)全PHPSESSID參數(shù)”url?

PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50”來實(shí)現(xiàn)。

【PHPcli模式通過session_id()使用session】

可以通過它來獲取當(dāng)前會話的PHPSESSID,也可以通過它來設(shè)置當(dāng)前的會話PHPSESSID。

PHPcli模式下可以通過設(shè)置這個(gè),達(dá)到使用session的目的,非常方便。

例如:

?php
// session_id('vingbrv8m64asth0nhplu9gmb7');
session_start();
$_SESSION[md5(rand(100,999))] = rand(100,999);
var_dump($_SESSION);

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php緩存技術(shù)總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《PHP錯(cuò)誤與異常處理方法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • php中session_id()函數(shù)詳細(xì)介紹,會話id生成過程及session id長度
  • php查看當(dāng)前Session的ID實(shí)例
  • PHP修改session_id示例代碼
  • PHP通過session id 實(shí)現(xiàn)session共享和登錄驗(yàn)證的代碼
  • PHP Session_Regenerate_ID函數(shù)雙釋放內(nèi)存破壞漏洞
  • php生成SessionID和圖片校驗(yàn)碼的思路和實(shí)現(xiàn)代碼
  • PHP Session ID的實(shí)現(xiàn)原理與實(shí)例

標(biāo)簽:海北 濮陽 文山 梅河口 湘西 黔東 惠州 廈門

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP中Session ID的實(shí)現(xiàn)原理實(shí)例分析》,本文關(guān)鍵詞  PHP,中,Session,的,實(shí)現(xiàn),原理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP中Session ID的實(shí)現(xiàn)原理實(shí)例分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP中Session ID的實(shí)現(xiàn)原理實(shí)例分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章