對比起 Cookie,Session 是存儲在服務器端的會話,相對安全,並且不像 Cookie 那樣有存儲長度限制,本文簡單介紹 Session 的使用。
由於 Session 是以文本文件形式存儲在服務器端的,所以不怕客戶端修改 Session 內容。實際上在服務器端的 Session 文件,PHP 自動修改 Session 文件的權限,只保留了系統讀和寫權限,而且不能通過 ftp 修改,所以安全得多。
由於 Session 是以文本文件形式存儲在服務器端的,所以不怕客戶端修改 Session 的內容。實際上在服務器端的 Session 文件,PHP自動修改 Session 文件的權限,只保留了系統讀和寫權限,而且不能通過 ftp 修改,所以安全很多。
<?php
// 啟動Session
session_start();
// 聲明一個名為 admin 的變量,並賦空值。
$_SESSION["admin"] = null;
?>
<?php
// 啟動Session
session_start();
// 將原來注冊的某個變量銷毀
unset($_SESSION['admin']);
// 銷毀整個 Session 文件
session_destroy();
?>
<?php
// 啟動Session
session_start();
// 保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>
<?php
// 保存一天
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime);
session_start();
$_SESSION["admin"] = true;
?>
<?php
// 保存一天
$lifeTime = 24 * 3600;
// 取得當前 Session 名,默認為 PHPSESSID
$sessionName = session_name();
// 取得 Session ID
$sessionID = $_GET[$sessionName];
// 使用 session_id() 設置獲得的 Session ID
session_id($sessionID);
session_set_cookie_params($lifeTime);
session_start();
$_SESSION['admin'] = true;
?>
<?php
// 設置一個存放目錄
$savePath = './session_save_dir/';
// 保存一天
$lifeTime = 24 * 3600;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
$_SESSION['admin'] = true;
?>
另外,我們還可以使用 session_set_save_handler 函數來自定義 Session 的調用方式。
PHP函數補完:session_id()
session_id()
session_id() 存取目前 session 代號。
語法: string session_id(string [id]);
本函數可取得或者重新配置目前存放 Session 的代號。若無參數 id 則表示只有取得目前 Session 的代號,加上參數則表示將 Session 代號設成新指定的 id。輸入及返回均為字符串。
輸出 session_id()
代碼如下 復制代碼<?php
session_start();
echo session_id();
// 輸出 dqr58dnuqj2gufvg4o3tmjb9v4
?>
設置 session_id()
代碼如下 復制代碼 <?phpsession_id 恢復 session的內容
php的session是可以程序恢復的,這個和java不太一樣。session的恢復機制可以實現多個應用程序session的共享,因為php的session都是以文件形式或者數據庫存儲的。首先是session_id的獲取是通過session_id()函數獲取,這個值可以進行傳遞。
程序恢復session,首先要知道session_id,大家通過手冊可以知道session的恢復通過session_id($id);但是在恢復時要注意一個先後順序,要得到之前session的內容,必須在session_start()之前執行session_id($id),這樣才能在執行了session_start時初始化session的時候恢復到之前的內容,否則的話你得到的是一個空的session,你什麼也得不到。之前session被重新初始化了。這個和session_start()的作用有密切關系,因為session_start告訴php,session要初始化,要從session文件中反序列化session內容,所以session_start的作用就是把之前存儲的文件內容反序列化。session_start序列化之前要知道session_id,如果沒有就生成一個新的session_id。如果有就反序列化相應文件的內容。