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