Session和Cookie实现购物车

2023-10-27

来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=342
GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
http://cnsendnet.taobao.com

使用Session和Cookie实现购物车的比较

购物车相当于现实中超市的购物车,不同的是一个是实体车,一个是虚拟车而已。用户可以在购物网站的不同页面之间跳转,以选购自己喜爱的商品,点击购买时,该商品就自动保存到你的购物车中,重复选购后,最后将选中的所有商品放在购物车中统一到付款台结账,这也是尽量让客户体验到现实生活中购物的感觉。服务器通过追踪每个用户的行动,以保证在结账时每件商品都物有其主。

购物车的功能包括以下几项:

把商品添加到购物车,即订购

删除购物车中已定购的商品

修改购物车中某一本图书的订购数量

清空购物车

显示购物车中商品清单及数量、价格

实现购物车的关键在于服务器识别每一个用户并维持与他们的联系。但是HTTP协议是一种“无状态(Stateless)”的协议,因而服务器不能记住是谁在购买商品,当把商品加入购物车时,服务器也不知道购物车里原先有些什么,使得用户在不同页面间跳转时购物车无法“随身携带”,这都给购物车的实现造成了一定的困难。

目前购物车的实现主要是通过cookie、session或结合数据库的方式。下面分析一下它们的机制及作用。

  1. cookie

cookie是由服务器产生,存储在客户端的一段信息。它定义了一种Web服务器在客户端存储和返回信息的机制,cookie文件它包含域、路径、生存期、和由服务器设置的变量值等内容。当用户以后访问同一个Web服务器时,浏览器会把cookie原样发送给服务器。通过让服务器读取原先保存到客户端的信息,网站能够为浏览者提供一系列的方便,例如在线交易过程中标识用户身份、安全要求不高的场合避免用户重复输入名字和密码、门户网站的主页定制、有针对性地投放广告等等。利用cookie的特性,大大扩展了WEB应用程序的功能,不仅可以建立服务器与客户机的联系,因为cookie可以由服务器定制,因此还可以将购物信息生成cookie值存放在客户端,从而实现购物车的功能。用基于cookie的方式实现服务器与浏览器之间的会话或购物车,有以下特点:

cookie存储在客户端,且占用很少的资源,浏览器允许存放300个cookie,每个cookie的大小为4KB,足以满足购物车的要求,同时也减轻了服务器的负荷;

cookie为浏览器所内置,使用方便。即使用户不小心关闭了浏览器窗口,只要在cookie定义的有效期内,购物车中的信息也不会丢失;

cookie不是可执行文件,所以不会以任何方式执行,因此也不会带来病毒或攻击用户的系统;

基于cookie的购物车要求用户浏览器必须支持并设置为启用cookie,否则购物车则失效;

存在着关于cookie侵犯访问者隐私权的争论,因此有些用户会禁止本机的cookie功能。

  1. session

session是实现购物车的另一种方法。session提供了可以保存和跟踪用户的状态信息的功能,使当前用户在session中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,它与cookie最重大的区别是,session将用户在会话期间的私有信息存储在服务器端,提高了安全性。在服务器生成session后,客户端会生成一个sessionid识别号保存在客户端,以保持和服务器的同步。这个sessionid是只读的,如果客户端禁止cookie功能,session会通过在URL中附加参数,或隐含在表单中提交等其他方式在页面间传送。因此利用session实施对用户的管理则更为安全、有效。

同样,利用session也能实现购物车,这种方式的特点是:

session用新的机制保持与客户端的同步,不依赖于客户端设置;

与cookie相比,session是存储在服务器端的信息,因此显得更为安全,因此可将身份标示,购物等信息存储在session中;

session会占用服务器资源,加大服务器端的负载,尤其当并发用户很多时,会生成大量的session,影响服务器的性能;

因为session存储的信息更敏感,而且是以文件形式保存在服务器中,因此仍然存在着安全隐患。

  1. 结合数据库的方式

这也是目前较普遍的模式,在这种方式中,数据库承担着存储购物信息的作用,session或cookie则用来跟踪用户。这种方式具有以下特点:

数据库与cookie分别负责记录数据和维持会话,能发挥各自的优势,使安全性和服务器性能都得到了提高;

每一个购物的行为,都要直接建立与数据库的连接,直至对表的操作完成后,连接才释放。当并发用户很多时,会影响数据库的性能,因此,这对数据库的性能提出了更高的要求;

使cookie维持会话有赖客户端的支持。

各种方式的选择:

虽然cookie可用来实现购物车,但必须获得浏览器的支持,再加上它是存储在客户端的信息,极易被获取,所以这也限制了它存储更多,更重要的信息。所以一般cookie只用来维持与服务器的会话,例如国内最大的当当网络书店就是用cookie保持与客户的联系,但是这种方式最大的缺点是如果客户端不支持cookie就会使购物车失效。

Session 能很好地与交易双方保持会话,可以忽视客户端的设置。在购物车技术中得到了广泛的应用。但session的文件属性使其仍然留有安全隐患。

结合数据库的方式虽然在一定程度上解决了上述的问题,但从上面的例子可以看出:在这种购物流程中涉及到对数据库表的频繁操作,尤其是用户每选购一次商品,都要与数据库进行连接,当用户很多的时候就加大了服务器与数据库的负荷

来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=342
GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
http://cnsendnet.taobao.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Session和Cookie实现购物车 的相关文章

  • dotnet core 使用传统Cookie

    dotnet core 使用传统Cookie 先在添加Cookie中间件 app UseCookiePolicy public void Configure IApplicationBuilder app IHostingEnvironme
  • dotnet core web IApplicationBuilder 中间件学习

    dotnet core web IApplicationBuilder 中间件学习 编写一个自己的中间件的模版 public static class MyApp public static IApplicationBuilder User
  • 如何在 Ubuntu 22.04 上安装 .NET Core (dotnet)

    微软 NET核心是一个免费的开源软件框架 设计时考虑了 Linux 和 macOS 它是 NET Framework 的跨平台继承者 可用于 Linux macOS 和 Windows 系统 NET Core 6 是一个 LTR 版本 将在
  • aspnet zero Refused to apply style from '...'because its MIME type ('') is not a supported styleshee

    这是asp net zero前端css javascript无法加载造成的错误 解决方法 1 安装npm 2 安装yarn cnpm install g yarn 3 在 Web Mvc目录下 打开cmd 执行 yarn 执行完成后再运行
  • Session和Cookie实现购物车

    来自森大科技官方博客 http www cnsendblog com index php p 342 GPS平台 网站建设 软件开发 系统运维 找森大网络科技 http cnsendnet taobao com 使用Session和Cook
  • Blazor 路由及导航开发指南

    翻译自 Waqas Anwar 2021年4月2日的文章 A Developer s Guide To Blazor Routing and Navigation 1 检查传入的请求 URL 并将它们导航到对应的视图或页面是每个单页应用程序
  • dotNet基于office实现word转pdf

    20171228 WordToPdf byDotNet 基于Office的实现步骤 主要是利用了 office com 组件中的 Microsoft Office Interop word dll 动态链接库文件可以通过 c 代码实现对 w
  • Blazor 模板化组件开发指南

    翻译自 Waqas Anwar 2021年4月15日的文章 A Developer s Guide To Blazor Templated Components 1 在我之前的一篇文章 Blazor 组件入门指南中 我介绍了组件参数 并向您
  • 学习abp-1-ContosoUniversity Abp版

    1 去abp官网下载模板工程 https aspnetboilerplate com 项目名称为ContosoAbp 这里使用的是net core 3 x 2 x版本在编辑用户时 会报错 打开下载的解决方案 等待nuget还原包 2 数据库
  • visual studio 2019 sql server localdb 数据库中文乱码解决方法

    今天使用localdb学习asp net core时 发现写入localdb数据库的中文为乱码 按照网上的方法解决 却无法显示 这里只有用sql语句更改了 参考这个 但我试了不成功 用sql语句更改可以 https www cnblogs
  • 在wpf中利用异步lambda编程,模拟数据库连接,防止界面假死

    参考 图解C 第20章异步编程第五节程序 解决在wpf中连接数据库 界面假死问题 public partial class MainWindow Window private bool isConnected false public Ma
  • 欢迎来到 C# 9.0(Welcome to C# 9.0)

    C 9 0 已于 2020年11月10日 正式发布了 请点击链接转至 C 9 0 正式发布了 C 9 0 on the record 阅读最新版内容 https mp weixin qq com s b7yd5FoR6jDrhx8K 310
  • ABP模块系统学习及使用

    ABP模块系统简介 参考 ABP中配置的注册和初始化 ABP模块系统 ABP 源码解析 一 ABP启动 ABP框架提供了创建和组装模块的基础 一个模块能够依赖于另一个模块 在通常情况下 一个程序集就可以看成是一个模块 在ABP框架中 一个模
  • SQL Server连接字符串句法

    Application Name 应用程序名称 应用程序的名称 如果没有被指定的话 它的值为 NET SqlClient Data Provider 数据提供程序 AttachDBFilename extended properties 扩
  • C#判断是否是以管理员权限允许当前应用

    private static bool CheckForAdminRights string path Path Combine Environment GetFolderPath Environment SpecialFolder Win
  • 深入解析Invoke and BeginInvoke, 同步与异步解析

    Invoke and BeginInvoke 本文后面的源代码分析在我的博客园博客 就是此链接 在 Invoke 或者 BeginInvoke 的使用中无一例外地使用了委托 Delegate 至于委托的本质请参考我的另一随笔 对 net事件
  • Ado.net批量插入数据

    采用的是SqlBulkCopy方法 数据库是sql server 示例代码地址 https gitee com Alexander360 LearnAdoNet SqlBulkCopy批量插入的方法如下 包括list转datatable方法
  • ASP.NET Core WebAPI学习-1

    Web API学习 ASP NET Core WebAPI学习 1 ASP NET Core WebAPI学习 2 ASP NET Core WebAPI学习 3 ASP NET Core WebAPI学习 4 ASP NET Core W
  • 学习C# 哈希表(HashTable)用法

    学习C 哈希表 HashTable 用法 1 哈希表 HashTable 简述 在 NET Framework中 Hashtable是System Collections命名空间提供的一个容器 用于处理和表现类似keyvalue的键值对 其
  • abp去掉AbpUser中的Name,Surname

    abp是国外的框架 默认的框架中的AbpUser表中的Name和Surname是分开的 这不符合国情 可以先去掉 1 在User类中重写Name和Surname 并设置为私有 2 在DbContext类中 重写OnModelCreating

随机推荐

  • SylixOS电源管理概述以及接口介绍

    1 概述 电源管理是操作系统中重要的一部分 要实现电源管理功能 首先需要设备本身支持电源管理操作 其次是操作系统支持电源管理操作 SylixOS支持电源管理功能 电源管理分为两大部分 CPU功耗管理和外设功耗管理 1 1 CPU功耗管理 S
  • power query 如何实现group_concat功能

    power query 分组合并展示 网上答案 https www cnblogs com wsmwsm p 12910590 html 答案 用powerquery 第一步 从表格进入pq界面 第二步 将kid2name列和id列都转换成
  • redis:redis cluster集群实践

    redis集群参数配置 我们后面会部署一个Redis集群作为例子 在那之前 先介绍一下集群在redis conf中的参数 cluster enabled
  • python编译报错 ImportError: cannot import name ‘jaccard_similarity_score‘

    报错如下 问题代码 import numpy as np from sklearn metrics import jaccard similarity score y pred 0 2 1 3 y true 0 1 2 3 print ja
  • 认识传输层(UDP与TCP)

    传输层主要负责数据能够从发送端发送到接收端 要正确传输就要明确发送端和接收端 这时候IP地址和端口号一起就可以确定一端了 那么他们是怎么唯一标识的呢 1 端口号 port 端口号唯一标识一个主机上进行通信的不同应用程序 在TCP IP协议中
  • flutter Stack超出底图范围后,关闭按键点击效果失效

    既然是关闭按键超出了底图范围导致不能点击 那就让关闭按键不超出就可以了 可以给底图再添加一个大点的底图 这两个底图作为一个整体 关闭按键就可以点击了 如图 下面添加了一个黑色的底图用来扩充原来的底图范围 白色关闭按键就可以点击得到了 ret
  • 计算机硬件耗电,电脑中最耗电的三个硬件排行:这答案意料之外的情理之中!...

    众所周知 只要电脑工作的话就肯定会耗电 那么问题就来了 在电脑中哪个硬件的耗电量是最高的呢 耗电的多少又会有哪些标准进行判断呢 就像笔者的文章中反复强调的 我们既要知道结果但同时还需要知道 为什么 笔者今天就继续用打破砂锅问到底的死磕精神来
  • echarts地图map

    在vue中使用echarts绘制图表 npm install echarts save 全局安装echarts 具体代码及注释如下
  • mac上的matlab的设置工具箱cvx

    cvx的下载地址 http cvxr com cvx download 首先怎么做到在终端运行matlab程序呢 打开终端 vi bash profile 进行配置 加入 export PATH PATH Applications MATL
  • ixp协议服务器,ipx协议中的“内部网络号”是什么意思?

    1 IPX的协议构成 IPX协议簇包括如下主要协议 IPX 第三层协议 用来对通过互联网络的数据包进行路由选择和转发 它指定一个无连接的数据报 相当于TCP IP协议簇中的IP协议 SPX 顺序包交换 Sequenced Packet Ex
  • angular编译版本冲突解决办法总结

    刚刚涉足angular 对于node npm typescript等都不太熟悉 网上下载别人源码一编译 报一堆英文错误 死了的心都有了 先来感受一下吧 经过两天的踩坑 东看看 西查查 终于算是解决了目前项目的错误 虽然不知道为什么 但是可以
  • 三元运算符判断字符串是否为空

    有一个变量String userId 判断是否为null 如果为null 就赋值为空串 否则就不变 用if条件写是 if null userId userId 想用三元运算符写 常见错误写法 userId null userId 这样是错误
  • html禁止自动填充input表单的完美解决办法

    提交登陆等表单时 允许记录了密码则会保存起来 且每次都会自动填充入input 我们有时候不需要自动填充 试过网上的各种方法都没能完美解决 最后终于找到解决办法 废话不多说 直接上代码
  • STM8S105K4T6硬件IIC调试小结

    1 IIC初始化 具体时钟设置参考此篇文章 https blog csdn net u014397533 article details 46495905 void I2C Init void I2C CR1 0x00 禁止I2C外设 此句
  • 日本语语料库

    来自 日语语料库建设的现状综述 上海外国语大学 毛文伟 2009年 1 EDR语料库 EDR 该语料库由日本电子化辞书研究所开发 并于1995年推出 素材选自新闻报道和杂志 规模为 20 万句 另有 10 万 句左右的英语语料 在原始语料的
  • 深度学习图像融合 合成 协调笔记

    目录 图像合成最新资料汇总1 图像合成最新资料汇总2 图像渲染 pip install poetry
  • 【Espruino】NO.05 按键是你的仆人

    http blog csdn net qwert1213131 article details 27104341 本文属于个人理解 能力有限 纰漏在所难免 还望指正 小鱼有点电 按键 生活中随处可见 手机 电脑 家用电器 用来执行各种功能
  • Linux中用stat命令查看文件时3个时间点解析

    有些时候 我们需要使用stat命令来查看文件的详细信息 另外联想下 ls l命令显示的是什么时间 touch命令修改文件的时间戳 修改的又是什么时间 在这里我们一起来试验下 首先 我们来看下stat情况 如图所示 会出现3个类型的时间 分别
  • CPU时间与系统时间(CPU time and wall clock time)

    CPU时间是指一段程序在CPU上面运行消耗的时间 也是内核时间 kernel time 在Linux Unix系统里面 C 程序的COU时间可以用一些第三方的库提供的函数测出 但是在Windows系统里面 没有可以直接使用的第三方函数 在这
  • Session和Cookie实现购物车

    来自森大科技官方博客 http www cnsendblog com index php p 342 GPS平台 网站建设 软件开发 系统运维 找森大网络科技 http cnsendnet taobao com 使用Session和Cook