Http Session介紹與應用
文章目錄
1. Session
由於 Cookie 是服務端下發給客戶端由客戶端本地儲存的。換而言之客戶端可以在本地對其隨意操作,包括刪除和修改。如果客戶端隨意偽造一個 Cookie 的話,對於服務端是無法辨別的,就會造成服務端被矇蔽,構成安全隱患。
於是乎就有了另外一種基於 Cookie 基礎之上的手段:Session:
Session 區別於 Cookie 一個很大的地方就是:Session 資料存在了服務端,而 Cookie 存在了客戶端本地,存在服務端最大的優勢就是,不是使用者想怎麼改就怎麼改了
Session 這種機制會更加適合於存放一些屬於使用者而又不能讓使用者修改的資料,因為客戶端不再儲存具體的資料,只是儲存一把“鑰匙”,偽造一把可以用的鑰匙,可能性是極低的,所以不需要在意。
1.1.PHP Session 變數
當您執行一個應用程式時,您會開啟它,做些更改,然後關閉它。這很像一次會話。計算機清楚你是誰。它知道你何時啟動應用程式,並在何時終止。但是在因特網上,存在一個問題:伺服器不知道你是誰以及你做什麼,這是由於 HTTP 地址不能維持狀態。
通過在伺服器上儲存使用者資訊以便隨後使用,PHP session 解決了這個問題(比如使用者名稱稱、購買商品等)。不過,會話資訊是臨時的,在使用者離開網站後將被刪除。如果您需要永久儲存資訊,可以把資料儲存在資料庫中。
Session 的工作機制是:為每個訪問者建立一個唯一的 id (UID),並基於這個 UID 來儲存變數。UID 儲存在 cookie 中,亦或通過 URL 進行傳導。
1.1.PHP使用Session
使用session
在您把使用者資訊儲存到 PHP session 中之前,首先必須啟動會話。
註釋:session_start() 函式必須位於 標籤之前:
<?php
session_start();
?>
<html>
<body>
<!-- 你的程式碼-->
</body>
</html>
上面的程式碼會向伺服器註冊使用者的會話,以便您可以開始儲存使用者資訊,同時會為使用者會話分配一個 UID。
儲存 Session 變數
儲存和取回 session 變數的正確方法是使用 PHP $_SESSION 變數:
<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>
輸出:
Pageviews=1
在下面的例子中,我們建立了一個簡單的 page-view 計數器。isset() 函式檢測是否已設定 “views” 變數。如果已設定 “views” 變數,我們累加計數器。如果 “views” 不存在,則我們建立 “views” 變數,並把它設定為 1:
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
終結 Session
如果您希望刪除某些 session 資料,可以使用 unset() 或 session_destroy() 函式。
unset() 函式用於釋放指定的 session 變數:
<?php
unset($_SESSION['views']);
?>
您也可以通過 session_destroy() 函式徹底終結 session:
<?php
session_destroy();
?>
註釋:session_destroy() 將重置 session,您將失去所有已儲存的 session 資料。