cookie实现购物车与session的登录判断

Cookie是由服务器端生成,发送给客户端,在客户端存储,而session是有服务器端生成,并存储于服务器端,因而session比cookie安全。但是如果什么都放session的话,会拖垮服务器的。

要实现购物车,首先我们用js模拟一个商品对象,这里只给出了加入购物车的功能

'use strict';
var id=0;
function getId() {
    id++;
    return id;
}
function Good(name,price,introduce,img,id) {
    this.name=name;
    this.price=price;
    this.introduce=introduce;
    this.id=id;
    this.img=img;
};

Good.prototype.show=function(){
    var str='<div class="box"> <a href="" ><img src="'+this.img+'"></a><p>'+this.name+'</p> <a href="javascript:void(0)" id="a'+this.id+'">加入购物车</a> </div>';
    $('.content').append(str);
    return this;
};
//加入购物车
Good.prototype.add=function(){
    var that=this;
    $.ajax({
        url: "action.php",
        type: "POST",
        data:{_name:that.name,_price:that.price,_introduce:that.introduce,_id:that.id},
        error:function () {
            alert("加入购物车失败!");
        },
        success:function(data){
            var str=data;
            //alert(data);
            if(confirm(data)){
                location.assign("car.php");
            }
        }
    });
};
//添加监听
Good.prototype.adde=function () {
    var _id="#a"+this.id;
    var that=this;
    $(_id).click(function () {
        that.add();
    });
};
new Good("haha",132,"hehehehehe","images/demo.png",getId()).show().adde();//new 一个对象
当点击加入购物车是,通过ajax异步交个后台实现。
下面是后台处理action.php文件
<?php
    header('content-type:text/html;charset=utf-8');
//得到传过来的商品信息
    $name=$_POST['_name'];
    $id=$_POST['_id'];
    $price=$_POST['_price'];
    $introduce=$_POST['_introduce'];
//通过cookie来存储。
    if(isset($_COOKIE['goods'])){
        $arr=unserialize($_COOKIE['goods']);
        //print_r($arr);
//判断是否已经加入购物车
        foreach ($arr as $ar){
            if($ar['id']==$id){
                die( "已经加入购物车,是否去结算?");
            }
        }
//通过二维数组来存储
        $arrr=array('id'=>$id,'name'=>$name,'price'=>$price,'introduce'=>$introduce);
        array_push($arr,$arrr);
        setcookie("goods",serialize($arr),time()+3600);
        echo "加入购物车成功,是否去结算?";
    }else{
        $arr[0]['id']=$id;
        $arr[0]['name']=$name;
        $arr[0]['price']=$price;
        $arr[0]['introduce']=$introduce;
        setcookie("goods",serialize($arr),time()+3600);
        echo "加入购物车成功,是否去结算?";
    }
删除购物车上的商品
delect.php文件
<?php
    $id=@$_GET['id'];
    if(isset($_COOKIE['goods'])&&$_COOKIE['goods']!=null) {
    $arr = @unserialize($_COOKIE['goods']);
    }else die("<script>location.assign(\"car.php\")</script>");
    for($i=0;$i<sizeof($arr);$i++){
        if($arr[$i]['id']===$id){
            $arr[$i]=null; //也可用unset($arr[$i])
            break;
        }
    }
    setcookie("goods",serialize($arr),time()+3600);
    die("<script>location.assign(\"car.php\")</script>");
//清空购物车,可以直接撤销cookie
 setcookie("goods","",time()-1);//也可以用unset($_COOKIE['goods'])来销毁
die("<script>location.assign(\"car.php\")</script>");

//由于购物车信息不算太重要,提交订单后才涉及服务器后台的处理,所以可以放cookie,当然放session也是可以的
//但是如果放太多东西到session上的话,会浪费服务器资源,带宽等,拖累服务器。

//session 判断登录
<?php
    header('content-type:text/html;charset=utf-8');
    session_start();//要用session必须先用session_start().
//为了方便演示,这里不从数据库读取账号密码
    $defult_user="123456";
    $defule_password="admin";
    $user=$_POST['user'];
    $password=$_POST['password'];
//因为有错误超过五次的用户在半个小时内禁止登录,所以要先检测是否有禁止登录
    if(isset($S_ESSION['time'])){
//要控制session的有效时间,好像是要修改服务器的配置文件,这里用另一种方法来实现
        if(time()-$_SESSION['time']>1800){
            session_destroy();//销毁
        }
    }
    if(!isset($_SESSION['login'])){
        $_SESSION['login']=true;
    };
 
    if($_SESSION['login']) {
        if ($user == $defult_user && $password == $defule_password) {
            if(isset($_SESSION['in'])&&$_SESSION['in']==true){//$_SESSION['in']用来判断是否已经登录,防止表单重复提交
                die("<script>alert(\"你已经登陆了\");location.assign(\"shop.html\")</script>");
            }else if(isset($_SESSION['flag'])){
                unset($_SESSION['flag']);
                unset($_SESSION['login']);
                $_SESSION['in']=true;
            }
            die("<script>alert(\"登陆成功\");location.assign(\"shop.html\")</script>");
        } else if (!(isset($_SESSION['flag']))) {
            $_SESSION['flag'] = 1;
            die("<script>alert(\"密码错误\");location.assign(\"login.html\")</script>");
        } else {
            $_SESSION['flag']++;
            if($_SESSION['flag']==5){
                $_SESSION['login']=false;
                $_SESSION['time']=time();
            }
            die("<script>alert(\"密码错误\");location.assign(\"login.html\")</script>");
        }
    }else{
        die("<script>alert(\"你已经连续登陆五次错误,请半小时后登录\");location.assign(\"login.html\")</script>");
    }





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章