使用session頁面控制登錄入口及購物車效果的實現


      由於 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()不可以一次注銷整個數組,這樣會禁止整個會話功能 ,

 

如:unset($_SESSION)將全局變量$_SESSION銷毀,而且沒有辦法將其恢復 ,用戶也不能再注冊 $_SESSION變量,

 

 

<?php
unset($_SESSION['views']);  //刪除單個session
?>

 

  

 
刪除多個會話$_SESSION=array();
//刪除多個會話,把一個空數組給$_SESSION,把之前的值覆蓋了,這樣並不是將$_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>";
?>

  

結束當前的會話:

session_destory();
 
<?php
Session_start();                          //銷毀全部session
//...
session_destroy();
?>

  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM