由於 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(); ?>