首頁  >  文章  >  後端開發  >  Php如何創建Session

Php如何創建Session

墨辰丷
墨辰丷原創
2018-06-07 11:22:266063瀏覽

本篇文章主要介紹Php如何創建Session,有興趣的朋友參考下,希望對大家有幫助。

相關專題推薦:php session(包含圖文、影片、實戰案例)

啟動session 會話,並建立一個$admin 變量:

// 启动 session session_start(); 
// 声明一个名为 admin 的变量,并赋空值。 
$_session["admin"] = null; 
?>  

如果你使用了Session,或是該PHP 檔案要呼叫Session 變量,那麼就必須在呼叫Session 之前啟動它,使用session_start() 函數。其它都不需要你設定了,PHP 自動完成 session 檔案的建立。

執行完這個程式後,我們可以到系統暫存資料夾找到這個 session 文件,一般檔案名稱如:sess_4c83638b3b0dbf65583181c2f89168ec,後面是 32 位元編碼後的隨機字串。用編輯器開啟它,看一下它的內容:

admin|N;

#一般內容結構:

變數名稱|類型:長度:值;

並用分號隔開每個變數。有些是可以省略的,例如長度和類型。

我們來看驗證程序,假設資料庫儲存的是使用者名稱和md5 加密後的密碼:

// 表单提交后...   
$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 (!emptyempty($userInfo)) 
{ 
if ($userInfo["username"] == $username) 
{ 
// 当验证通过后,启动 session 
session_start(); 
// 注册登陆成功的 admin 变量,并赋值 true 
$_SESSION["admin"] = true; 
} 
else 
{ 
die("用户名密码错误"); 
} 
} 
else 
{ 
die("用户名密码错误"); 
}

我們在需要使用者驗證的頁面啟動session,判斷是否登陸:

// 防止全局变量造成安全隐患 
$admin = false; 
// 启动会话,这步必不可少 
session_start(); 
// 判断是否登陆 
if (isset($_SESSION["admin"]) && $_SESSION["admin"] == true) 
{ 
echo "您已经成功登陆"; 
} 
else 
{ 
// 验证失败,将 $_session["admin"] 置为 false 
$_SESSION["admin"] = false; 
die("您无权访问"); 
} 
?>

是不是很簡單呢?將$_session 看成是儲存在伺服器端的陣列即可,我們註冊的每一個變數都是陣列的鍵,跟使用陣列沒有什麼分別。

如果要登出系統怎麼辦?銷毀 session 即可。

<?php 
session_start(); 
// 这种方法是将原来注册的某个变量销毁 
unset($_SESSION["admin"]); 
// 这种方法是销毁整个 session 文件 
session_destroy(); 
?>

Session 能否像 Cookie 那樣設定生存週期呢?有了 Session 是否就完全拋棄 Cookie 呢?我想說,結合 Cookie 來使用 session 才是最方便的。

Session 是如何來判斷客戶端使用者的呢?它是透過Session ID 來判斷的,什麼是Session ID,就是那個Session 檔案的檔名,Session ID 是隨機產生的,因此能保證唯一性和隨機性,確保Session 的安全。一般如果沒有設定 Session 的生存週期,則 Session ID 儲存在記憶體中,關閉瀏覽器後該 ID 自動登出,重新要求該頁面後,重新註冊一個 session ID。

如果用戶端沒有停用 Cookie,則 Cookie 在啟動 Session 會話的時候扮演的是儲存 Session ID 和 session 生存期的角色。我們來手動設定session 的生存期:

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; 
?>  

如果客戶端使用IE 6.0 , session_set_cookie_params(); 函數設定Cookie 會有些問題,所以我們還是手動呼叫setcookie 函數來建立cookie。

假設客戶端禁用 Cookie 怎麼辦?沒辦法,所有生存週期都是瀏覽器進程了,只要關閉瀏覽器,再次請求頁面又得重新註冊 Session。那麼要如何傳遞Session ID 呢?透過URL 或透過隱藏表單來傳遞,PHP 會自動將session ID 發送到URL 上,URL 形如:http://www.openphp .cn /index.php?PHPSESSID=bba5b2a240a77e5b44cfa01d49cf9669,其中URL 中的參數PHPSESSID 就是Session ID了,我們可以使用$_GET 來取得該值,從而實現session ID 頁間傳遞。

// 保存一天 
<?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; 
?>

對於虛擬主機來說,如果所有使用者的Session 都保存在系統臨時資料夾裡,將給維護造成困難,而且降低了安全性,我們可以手動設定Session 檔案的儲存路徑,session_save_path ()就提供了這樣一個功能。我們可以將 session 存放目錄指向一個無法透過 Web 方式存取的資料夾,當然,該資料夾必須具備可讀寫屬性。

<?php 
// 设置一个存放目录 
$savePath = "./session_save_dir/"; 
// 保存一天 
$lifeTime = 24 * 3600; 
session_save_path($savePath); session_set_cookie_params($lifeTime); 
session_start(); 
$_session["admin"] = true; 
?>  

同 session_set_cookie_params(); 函式一樣,session_save_path() 函式也必須在 session_start() 函式呼叫之前呼叫。我們也可以將數組,物件儲存在 session 中。操作數組和操作一般變數沒有什麼區別,而保存物件的話,PHP 會自動對物件進行序列化(也叫串行化),然後保存於 session 中。以下例子說明了這一點:

<?php 
class person 
{ 
var $age; 
function output() 
{ 
echo $this->age; 
} 
function setAge($age) { 
$this->age = $age; 
} 
} 
?> 
setage.PHP 
<?php 
session_start(); 
require_once "person.PHP"; 
$person = new person(); 
$person->setAge(21); 
$_session[&#39;person&#39;] = $person; 
echo "check here to output age"; 
?> 
output.PHP 
<?php 
// 设置回调函数,确保重新构建对象。 
ini_set(&#39;unserialize_callback_func&#39;, &#39;mycallback&#39;); 
function mycallback($classname) { 
$classname . ".PHP"; 
} 
session_start(); 
$person = $_session["person"]; 
// 输出 21 
$person->output(); 
?>

總結:以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。

相關推薦:

PHP取得遠端圖片尺寸和大小的方法

php雙層循環實現九九乘法表

php呼叫快遞鳥介面

以上是Php如何創建Session的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn