PHP中的session預設情況下是使用用戶端的Cookie。當用戶端的Cookie被禁用時,會自動通過Query_String來傳遞。
Php處理會話的函數一共有11個,我們詳細介紹一下將要用到幾個函數。
1、 session_start
函數功能:開始一個會話或者返回已經存在的會話。
函數原型:boolean session_start(void);
傳回值:布爾值
session工作原理
首先,PHP為建立Session的使用者產生一個獨一無二的字串,用來標誌這個使用者的session.一般將這個字串稱作Session Id.然後“sess”+Session Id為檔案名稱(例如一個Session ID為111,那麼檔案名稱為sess_111)在伺服器的檔案系統中建立一個檔案,在檔案中儲存使用者在Session所定義的全域變數的變數名和值。然後再將Session Id作為一個名為PHPSession的Cookie儲存在使用者端的檔案系統中。
然後,當使用者再次串連伺服器訪問一個PHP指令碼時,PHP從使用者發來的PEESession這個Cookie中得到使用者所在Session的Session Id,並根據Session Id從伺服器的檔案系統中儲存Session資訊的檔案。最後從這個檔案中讀出使用者在上次串連時所設定的全域變數的值。
因此,我們可以看到Session的工作原理和我們上一節所介紹的身份認證的工作原理是一樣的。所不同的只是Session將資訊儲存在了伺服器的檔案系統中,而我們將資訊儲存在了資料庫中。當然使用Session好處就是資料的儲存和擷取是由PHP自動完成的,而直接使用Cookie的話就需要自己動手進行資料的儲存和擷取。
Session利用Cookie的身份標誌功能,將使用者在瀏覽網站時需要儲存的資訊儲存在伺服器上。這樣Session既克服了HTTP協議的缺陷,又防止了資訊的泄漏,而且方便了編程者的使用,是一個非常好的解決方案。不過,Session的功能只有PHP4支援,PHP3是不支援Session的。因此使用PHP3進行網站構建的讀者只能採用直接使用Cookie的方式。
session執行個體
在用session的時候,要先把php中的php.ini檔案中session.sava.path項設定好.
代碼如下 |
複製代碼 |
<?php // 啟動 Session session_start(); // 聲明一個名為 admin 的變數,並賦空值。 $_SESSION["admin"] = null; ?> <?php // 表單提交後… $posts = $_POST; // 清除一些空白符號 foreach ($posts as $key => $value) { $posts[$key] = trim($value); } $password = md5($posts["password"]); $username = $posts["username"]; $query = “SELECT `username` FROM `user` WHERE `password` = ‘$password’”; // 取得查詢結果 $userInfo = $DB->getRow($query); if (!empty($userInfo)) { if ($userInfo["username"] == $username) { // 當驗證通過後,啟動 Session session_start(); // 註冊登陸成功的 admin 變數,並賦值 true $_SESSION["admin"] = true; } else { die(“使用者名稱密碼錯誤”); } } else { die(“使用者名稱密碼錯誤”); } ?> 我們在需要使用者驗證的頁面啟動 Session,判斷是否登陸: <?php // 防止全域變數造成安全隱患 $admin = false; // 啟動會話,這步必不可少 session_start(); // 判斷是否登陸 if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true) { echo “您已經成功登陸”; } else { // 驗證失敗,將 $_SESSION["admin"] 置為 false $_SESSION["admin"] = false; die(“您無權訪問”); } ?> <?php session_start(); // 儲存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, “/”); ?> <?php session_start(); // 這種方法是將原來註冊的某個變數銷毀 unset($_SESSION["admin"]); // 這種方法是銷毀整個 Session 檔案 session_destroy(); ?> 我們來手動設定 Session 的生存期: <?php session_start(); // 儲存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, “/”); ?> 其實 Session 還提供了一個函數 session_set_cookie_params(); 來設定 Session 的生存期的,該函數必須在 session_start() 函數調用之前調用: <?php // 儲存一天 $lifeTime = 24 * 3600; session_set_cookie_params($lifeTime); session_start(); $_SESSION["admin"] = true; ?> |