当前位置:首页 > 行业动态 > 正文

如何利用Cookie技术高效存储购物车信息?

当用户未登录时,购物车信息存储在客户端的cookie中,不占用服务器资源且基本可持久化存储。

在当今的电子商务领域,购物车作为用户购物体验的重要组成部分,其实现方式多种多样,Cookie存储购物车信息是一种常见且有效的技术手段,以下将详细阐述Cookie存储购物车信息的相关内容:

1、背景

当用户处于未登录状态时,可以浏览商品,查看详细商品信息,也可以添加购物车,此时数据不能存在Redis中,因为Redis存储数据需要以用户的身份做标识,用户不登录就没有身份标识,所以此时的数据应该存储在本地的数据存储位置,即cookie当中。

2、实现思路

客户端操作:用户在详情页发送商品信息,商品信息经由Vue封装成json,向服务器发送ajax请求。

服务器端操作:视图函数接收到ajax请求,以request.body.decode()方式接收数据并且解码,将获取的数据封装成字典,加密后存入cookie中,方式为:response.set_cookie(‘cart’, cart_str, max_age=60 * 60 * 24 * 14),返回response,页面显示添加成功。

读取购物车信息:客户端请求购物车,请求发送至服务器,视图函数从cookie中读取数据,将数据解码,封装成前台需要的数据格式,前台模板变量接收到数据,vue对其进行处理,最终渲染页面,显示购物车数据。

3、界面效果

与Redis存储购物车数据相同,视图函数代码如下:

“`python

from carts.utils.code import RETCODE

from carts.utils import my_json

class DetailsView(View):

def get(self, request):

pass

class CartsView(View):

def get(self, request):

c_list = []

cart_str = request.COOKIES.get(‘cart’)

if cart_str is None:

context = {

‘v_js_carts’:c_list

}

return render(request, ‘c.html’, context)

cart_dict = my_json.loads(cart_str)

print(cart_dict)

for k,v in cart_dict.items():

c_d = {k:v}

c_list.append(c_d)

print(c_list)

context = {

‘v_js_carts’:c_list

}

return render(request, ‘c.html’, context)

def post(self, request):

# 1.接收

# 接收这五个参数:

# vmodel_skuamount :this.vmodel_skuamount,

# vmodel_skucaption : this.vmodel_skucaption,

# vmodel_skucount : this.vmodel_skucount,

# vmodel_skuname : this.vmodel_skuname,

# vmodel_skuprice : this.vmodel_skuprice

param_dict = json.loads(request.body.decode())

amount = param_dict.get(‘vmodel_skuamount’)

caption = param_dict.get(‘vmodel_skucaption’)

count = param_dict.get(‘vmodel_skucount’)

name = param_dict.get(‘vmodel_skuname’)

price = param_dict.get(‘vmodel_skuprice’)

# 将数据存入cookie

# 1.读取cookie中的购物车数据

cart_str = request.COOKIES.get(‘cart’)

if cart_str is None:

cart_dict = {}

else:

cart_dict = my_json.loads(cart_str)

# 2.增加新的商品信息

cart_dict = {

‘amount’:amount,

‘caption’:caption,

‘count’:count,

‘name’:name,

‘price’:price

}

# 3.将数据存入cookie中

cart_str = my_json.dumps(cart_dict)

response.set_cookie(‘cart’, cart_str, max_age=60 * 60 * 24 * 14)

# 4.响应

return response

以下是两个关于Cookie存储购物车信息的常见问题及解答:
1、为什么选择Cookie来存储购物车信息?
   当用户处于未登录状态时,无法使用需要用户身份标识的存储方式(如Redis),而Cookie可以存储在客户端,不占用服务器资源,且能在一定时间内保持数据的持久化存储,适合用于存储未登录用户的购物车信息。
2、Cookie存储购物车信息有哪些优缺点?优点:购物车信息存储在客户端,不占用服务器资源;可以设置较长的过期时间,只要客户不清空Cookie,每次访问都能记得上次的购物车信息。缺点:Cookie有大小限制,不能超过4K;不够安全,在公共办公环境等情况下,Cookie保存的信息可能会被其他人覆盖或窃取;对于大型的电子商务网站,无法对用户购买行为进行分析统计。
0