由於 Session 是以文本文件形式存儲在服務器端的,所以不怕客戶端修改 Session 內容。實際上在服務器端的 Session 文件,PHP 自動修改 Session 文件的權限,只保留了系統讀和寫權限,而且不能通過 ftp 修改,所以安全得多。
Session 是存儲在服務器端的,遠程用戶沒辦法修改 Session 文件的內容,因此我們可以單純存儲一個 $admin 變量來判斷是否登陸,首次驗證通過后設置 $admin 值為 true,以后判斷該值是否為 true,假如不是,轉入登陸界面,這樣就可以減少很多數據庫操作了。
使用session頁面登錄入口
新建一個簡單的登錄頁面:
<form action="loginchuli.php" method="post">
<div>用戶名:<input type="text" name="uid" /></div>
<div>密碼:<input type="password" name="pwd" /></div>
<input type="submit" value="登錄" />
</form>

新建一個類文件來訪問數據庫:
<?php
class DBDA
{
public $host="localhost";
public $uid = "root";
public $pwd = "";
public $dbname = "12345";
//成員方法
public function Query($sql,$type=1)
{
$db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);
$r = $db->query($sql);
if($type==1)
{
return $r->fetch_all();
}
else
{
return $r;
}
}
}
同目錄下新建 loginchuli.php:
<?phpd
session_start(); //啟動 Session 會話,並創建一個 $uid 變量:
include("../fengzhuang/DBDA.class.php");
$db = new DBDA();
$uid = $_POST["uid"];
$pwd = $_POST["pwd"];
$sql = "select pwd from users where uid='{$uid}'";
$attr = $db->Query($sql);
$mm = $attr[0][0];
if(!empty($pwd) && $pwd==$mm)
{
$_SESSION["uid"] = $uid;
header("location:main.php");
}
else
{
echo "登錄失敗!";
}
登錄之后的主界面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>
<?php
session_start();
//echo $_SESSION["uid"];
if(empty($_SESSION["uid"])) //防止用戶跳過登錄入口通過網頁鏈接直接進入
{
header("location:login.php");
exit;
}
$uid = $_SESSION["uid"];
include("../fengzhuang/DBDA.class.php");
$db = new DBDA();
$sql = "select name from users where uid='{$uid}'";
$attr = $db->Query($sql);
?>
<body>
<?php
echo "<h1>歡迎登錄:{$attr[0][0]}</h1>";
?>
</body>
</html>
用戶只有登錄成功后才可進入主界面,並且不能跳過登錄口直接進入。
session實現的購物車效果:
可以通過session 設置中間變量
首先新建產品列表:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>
<body>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
<td>名稱</td>
<td>價格</td>
<td>產地</td>
<td>庫存</td>
<td>操作</td>
</tr>
<?php
include("../fengzhuang/DBDA.class.php");
$db = new DBDA();
$sql = "select * from fruit";
$attr = $db->Query($sql);
foreach($attr as $v)
{
echo "<tr>
<td>{$v[1]}</td>
<td>{$v[2]}</td>
<td>{$v[3]}</td>
<td>{$v[4]}</td>
<td><a href='jia.php?code={$v[0]}'>加購物車</a></td>
</tr>";
}
?>
</table>
</body>
</html>
結果:

判斷有三種情況:
1.如果是第一次點擊加購物車,做一個二維數組扔到SESSION里
2.如果不是第一次點擊加購物車並且該水果第一次點擊,做一個該水果的一維數組扔到SESSION的二維數組里面
3.如果不是第一次點擊加購物車並且該水果不是第一次點擊,將SESSION數組里面該水果的數量加1
規定路徑下新建jia.php
<?php
session_start();
//將傳過來的水果加到購物車
$code = $_GET["code"];
if(empty($_SESSION["gwc"])) //判斷是否傳入數據
{
//1.如果是第一次點擊加購物車,做一個二維數組扔到SESSION里
$attr = array(
array($code,1)
);
$_SESSION["gwc"] = $attr;
}
else
{
//判斷該水果代號是否在SESSION數組里面出現
$attr = $_SESSION["gwc"];
if(PanDuan($code,$attr))
{
//3.如果不是第一次點擊加購物車並且該水果不是第一次點擊,將SESSION數組里面該水果的數量加1
for($i=0;$i<count($attr);$i++)
{
if($code == $attr[$i][0])
{
$attr[$i][1]++;
}
}
$_SESSION["gwc"]=$attr;
}
else
{
//2.如果不是第一次點擊加購物車並且該水果第一次點擊,做一個該水果的一維數組扔到SESSION的二維數組里面
$arr = array($code,1);
$attr[] = $arr;
$_SESSION["gwc"]=$attr;
}
}
var_dump($_SESSION["gwc"]);
//判斷v是不是在arr里面出現
function PanDuan($v,$arr)
{
$n = 0;
foreach($arr as $a)
{
if($v == $a[0])
{
$n++;
}
}
if($n==0)
{
return false;
}
else
{
return true;
}
}
點擊蘋果:

有一個一維數組被扔到session 傳導的二維數組里面
返回產品列表
再次點擊蘋果:

數量增加了1.
返回點擊菠蘿:

有新的一維數組被傳入。
自此通過 session 將購物車的信息傳入 session中,每個網頁都可訪問到。
退出及清理:
unset()不可以一次注銷整個數組,這樣會禁止整個會話功能 ,
<?php unset($_SESSION['views']); //刪除單個session ?>
<?php session_register(); $_SESSION["admin"]="aa"; $_SESSION['name']="葉凌月"; $_SESSION['age']=16; echo "<pre>"; print_r($_SESSION); echo "</pre>"; //刪除多個會話,把一個空數組給$_SESSION,把之前的值覆蓋了,這樣並不是將$_SESSION銷毀 ,還可以重新賦值 $_SESSION=array(); echo "<pre>"; print_r($_SESSION); echo "</pre>"; ?>
結束當前的會話:
<?php Session_start(); //銷毀全部session //... session_destroy(); ?>
