關於會話處理
HTTP 是一種無狀態的協議,說明每次請求的處理都與之前或之後的 請求無關,但是為了能夠調整用戶特有的行為和首選項,出現了一種在客戶端存儲少量信息(常稱為cookie)的實踐,但由於 cookie 大小的限制、所允許的 cookie 數量以及 cookie 的實現上的各種不一致,出現了另外一種解決方案:會話處理。
會話處理的實現方式是為每位網站訪問者分配一個稱之為會話 ID(SID)的唯一標識屬性,然後將此 SID 與任意數量的數據關聯。
開始會話
session_start();
創建會話變量
代碼如下 復制代碼$_SESSION['username'] = “jason”;
刪除會話變量
代碼如下 復制代碼 unset($_SESSION['username']);簡單的登入登出
代碼如下 復制代碼$supervisor = "admin";
$superpsw = "passwd";
// 檢查是否提交表單
if (isset($_POST['superadmin']))
{
if (!($_POST['supername'] == $supervisor) || !($_POST['superpass'] == $superpsw))
{
echo "用戶名或密碼錯誤";
exit;
}
else
{
session_start();
$_SESSION["superlogin"] = $_POST['supername'];
}
} else {
session_start();
// 檢查是否設置了會話變量,即是否已經登入,如果沒有,顯示登入頁面
if (! isset($_SESSION["superlogin"]) )
{
echo "<form name='form1' method='post' action='$_SERVER[PHP_SELF]'>";
echo "<div align='center'>請輸入管理員密碼<br />";
echo "管理員";
echo "<input type='text' name='supername'><br />";
echo "密 碼";
echo "<input type='password' name='superpass'><br />";
echo "<input type='submit' name='superadmin' value='進入'><br />";
echo "<input type='reset' name='cancel' value='重寫'></div>";
echo "</form>";
exit;
}
}
// 由用戶銷毀會話變量,登出
if (isset($_GET['logout'])) {
unset($_SESSION['superlogin']);
header("Location:index.php");
}
假設將此文件命名為include.php,將其包含到要驗證登入的頁面即可,例如 index.php
代碼如下 復制代碼 <?php
require “include.php”;
?>
<html>
<head>
<title>管理</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
</head>
<body>
<p><a href=”index.php?logout=1″>登出</a>
<p>歡迎進入</p>
</body>
</html>
如此訪問 index.php 頁面時將進入登入頁面,登錄後顯示 index.php 頁面內容,這個過程一直持續到用戶結束會話,如關閉浏覽器或點擊注銷按鈕,但是會話本身在PHP服務器有一個默認的生存期。
有效會話的持續時間由 php.ini 所控制,默認為1440秒,即24分鐘
session.gc_maxlifetime = 1440
PS:本文是個范例,用簡單的代碼來做說明,實際應用中會采用更加復雜的控制機制。