使用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();
?>

  

 

 

 

posted @ 2016-12-26 10:27  发瑞  阅读(2034)  评论(0编辑  收藏  举报