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>");
    }





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