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