關(guān)于PHP5 Session生命周期介紹
PHP5有很多值得學(xué)習(xí)的地方,這里我們主要介紹PHP5 Session的使用,Session 是如何來判斷客戶端用戶的呢?它是通過 Session ID 來判斷的,什么是 Session ID,就是那個(gè) Session 文件的文件名,Session ID 是隨機(jī)生成的,因此能保證***性和隨機(jī)性,確保Session 的安全。一般如果沒有設(shè)置 Session 的生存周期,則 Session ID 存儲在內(nèi)存中,關(guān)閉瀏覽器后該 ID 自動(dòng)注銷,重新請求該頁面后,重新注冊一個(gè) Session ID。
如果客戶端沒有禁用 Cookie,則 Cookie 在啟動(dòng) Session 會話的時(shí)候扮演的是存儲 Session ID 和 Session 生存期的角色。我們來手動(dòng)設(shè)置 Session 的生存期:
- <?php
- session_start();
- // 保存一天
- $lifeTime = 24 * 3600;
- setcookie(session_name(), session_id(), time() + $lifeTime, "/");
- ?>
其實(shí)PHP5 Session還提供了一個(gè)函數(shù) session_set_cookie_params(); 來設(shè)置PHP5 Session的生存期的,該函數(shù)必須在 session_start() 函數(shù)調(diào)用之前調(diào)用:
- <?php
- // 保存一天
- $lifeTime = 24 * 3600;
- session_set_cookie_params($lifeTime);
- session_start();
- $_SESSION["admin"] = true;
- ?>
#T#如果客戶端使用 IE 6.0 , session_set_cookie_params(); 函數(shù)設(shè)置 Cookie 會有些問題,所以我們還是手動(dòng)調(diào)用 setcookie 函數(shù)來創(chuàng)建 cookie。假設(shè)客戶端禁用 Cookie 怎么辦?沒辦法,所有生存周期都是瀏覽器進(jìn)程了,只要關(guān)閉瀏覽器,再次請求頁面又得重新注冊 Session。那么怎么傳遞 Session ID 呢?通過 URL 或者通過隱藏表單來傳遞,PHP 會自動(dòng)將 Session ID 發(fā)送到 URL 上,URL 形如:http://www.openphp.cn /index.php?PHPSESSID=bba5b2a240a77e5b44cfa01d49cf9669,其中 URL 中的參數(shù) PHPSESSID 就是 Session ID了,我們可以使用 $_GET 來獲取該值,從而實(shí)現(xiàn) Session ID 頁面間傳遞。
- <?php
- // 保存一天
- $lifeTime = 24 * 3600;
- // 取得當(dāng)前 Session 名,默認(rèn)為 PHPSESSID
- $sessionName = session_name();
- // 取得 Session ID
- $sessionID = $_GET[$sessionName];
- // 使用 session_id() 設(shè)置獲得的 Session ID
- session_id($sessionID);
- session_set_cookie_params($lifeTime);
- session_start();
- $_SESSION["admin"] = true;