php中session_id()函式詳細介紹,會話id生成過程及session id長度

NO IMAGE

php中session_id()函式原型及說明session_id()函式說明:stringsession_id([string$id])session_id() 可以用來獲取/設定 當前會話 ID。為了能夠將會話 ID 很方便的附加到 URL 之後, 你可以使用常量 SID 獲取以字串格…

php中session_id()函式原型及說明

session_id()函式說明:


string session_id ([ string $id ] )

session_id() 可以用來獲取/設定 當前會話 ID。

為了能夠將會話 ID 很方便的附加到 URL 之後, 你可以使用常量 SID 獲取以字串格式表達的會話名稱和 ID。 請參考 會話處理。

session_id()函式引數:

id

如果指定了 id 引數的值, 則使用指定值作為會話 ID。 必須在呼叫 session_start() 函式之前呼叫 session_id() 函式。 不同的會話管理器對於會話 ID 中可以使用的字元有不同的限制。 例如檔案會話管理器僅允許會話 ID 中使用以下字元:a-z A-Z 0-9 , (逗號)和 – (減號)

Note: 如果使用 cookie 方式傳送會話 ID,並且指定了 id 引數, 在呼叫 session_start() 之後都會向客戶端傳送新的cookie, 無論當前的會話 ID 和新指定的會話 ID 是否相同。

session_id()函式返回值:

session_id() 返回當前會話ID。 如果當前沒有會話,則返回空字串(””)。

php會話ID如何生成以及會話ID長度

    一個訪問者訪問你的 web 網站將被分配一個唯一的 id, 就是所謂的會話 id. 這個 id 可以儲存在使用者端的一個 cookie 中,也可以通過 URL 進行傳遞. Session會話用來追蹤每個使用者的會話,使用伺服器生成的SessionID進行標識,用以區分使用者。Session存放在伺服器的記憶體中,SessionID存放在伺服器記憶體和客戶機的Cookie裡面。這樣,當使用者發出請求時,伺服器將使用者Cookie裡面記錄的SessionID和伺服器記憶體中的SessionID進行比對,從而找到這個使用者對應的Session進行操作。所以,如果客戶機禁止Cookie的話,Session也不能使用。

php會話ID是如何產生的?PHP預設的session id生成演算法介紹

    以php5.3.6的原始碼為例,進入/ext/session目錄,生成session id的函式位於session.c檔案的345行,c語言函式原型如下:

PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS);

  有興趣的可以具體分析實現原理。

PHP預設的session id長度

擷取一些實際的php 5.4.6服務端生成的session id如下:

sess_00nrqa20hjrlaiac0eu726i4q5  sess_89j9ifuqrbplk0rti2va2k1ha0  sess_g2rv1kd6ijsj6g6c9jq5mqglv5 
sess_04es72a83tqsl0jqd3cvrc4s01  sess_8b7a5lme60g49lvk4u4jiemdn1  sess_g3uk6d3gbashg5eoq0b2k7vsk0 
sess_04u0ns0oobh2g93t009bij2rq0  sess_8dfvkiv8ml44fdqrk1rcmjchs4  sess_g64tddhbo8pbj8bs7bel44rf35 
sess_0592dolr5m0k392fah6c9preg7  sess_8fhgkjuakhatbeg2fa14lo84q1  sess_g6kl828qqsnvdrse7ff52cl2a4 
sess_066g8irr0m22iqotscepub4e13  sess_8gn03i9j1tta7655qfj6nl1l53  sess_g8t45j6qce7mf55nk14cotj5i4 
sess_08nr1fav9jqs2pdi5qlpsmd247  sess_8gvu05313o7p9usksaacaiegu6  sess_gbtjmr57iat86c8ve86ar5nh30

可見具體的session id 為 “sess_”後面的部分,長度為26位,此長度僅限於php 5.4.6.

php session_id()用法程式碼舉例如下:

輸出session_id()詳細程式碼:


<?php
session_start();
echo session_id();
// 輸出 08nr1fav9jqs2pdi5qlpsmd247
?>

設定 session_id()詳細程式碼:


<?php
session_id("www.169it.com");
session_start();
echo session_id();
// 輸出 www.169it.com
?>

您可能感興趣的文章:

PHP程式設計中的Session阻塞問題與解決方法分析PHP session檔案獨佔鎖引起阻塞問題解決方法PHP中Session引起的指令碼阻塞問題解決辦法php session的鎖和併發PHP 解決session死鎖的方法php中實現精確設定session過期時間的方法PHP中session變數的銷燬PHP中怎樣保持SESSION不過期 原理及方案介紹PHP中session使用方法詳解php session應用例項 登入驗證PHP會話控制:Session與Cookie詳解php基於session鎖防止阻塞請求的方法分析