zoukankan      html  css  js  c++  java
  • 使用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();
    ?>
    

      

     

  • 相关阅读:
    谈谈Vue.js——vue-resource全攻略
    XStream(xml/bean转换)
    Notepad++ xml/json格式化
    秒杀系统架构分析与实战
    Spring事务管理
    小程序思维导图(一)
    小程序思维导图(二)
    轻松搭建持续集成工具jenkins
    rep stos dword ptr es:[edi]
    关于dword ptr 指令
  • 原文地址:https://www.cnblogs.com/cyrfr/p/6221440.html
Copyright © 2011-2022 走看看