Session原理、生命周期及购物车功能的实现
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据(保存该浏览器(会话)的相关信息)时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
Session和Cookie的主要区别在于:
- Cookie是把用户的数据写给用户的浏览器。
- Session技术把用户的数据写到用户独占的session中(服务器端)。
- Cookie由于存在客户端,存在安全问题,每次使用cookie都会在本地生成一个cookie文件
Session将数据存在服务器端,数据更加安全 - Session将数据保存在服务器端,占用服务器资源,Cookie不会占用服务器的资源
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
例如:京东购物车信息保存Cookie 、淘宝购物车信息保存Session
session对象:
存储session
对于上述图例的实现,用IE6保存session数据,当前浏览器可以获得,雅思英语词汇但是第二个IE6 无法获得第一个浏览器保存Session 数据,IE8以上 或
火狐浏览器:当打开多个浏览器窗口,之间Session共享
原因:IE6 cookie 中保存jsessionId 默认会话级别 ;IE8或者火狐 保存cookie中
jsessionId 默认持久cookie
(一)Session实现原理
因此,若果将session id 持久化 ,IE6也可以实现上述功能。其中的Session Id
可以通过Session.getId()方法获得(Session保存数据依赖于cookie来进行实现)。
将写回给 浏览器 JSESSIONID 持久化(手动)
因此,一般我们不允许用户禁用cookie,如果意外遇到这种情况可以:
禁用cookie解决方案
解决办法:URL重写
第二次访问服务器会带一个URL,由于不能通过cookie方式传递SessionId,所以需要在URL中携带SessionId,例如:
注意:携带SessionId信息是使用分号“;”而不是问号“?”
因此在writesession中添加如下即可:
问题1:如果客户端关闭浏览器,是否就删除了Session ?
没有,Session保存在服务器端
问题2:IE6 保存Session,关闭浏览器,再次打开,数据丢失了?
IE6默认jsessionId保存会话Cookie中,关闭浏览器,会话cookie就会被删除,新航道雅思客户端丢失jsessionid
无法找到服务器对应Session对象
- 服务器Session对象还存在
(二)生命周期
Cookie生命周期:
- 创建 Cookie cookie=new Cookie(); response.addCookie();
- 销毁 会话cookie会在浏览器关闭时销毁,持久cookie在cookie过期(MaxAge)后销毁
Session生命周期
- 创建 HttpSession httpsession=request.getSession();创建session
- 销毁 (例如,销毁session即清空了购物车)
- (1)服务器关闭时销毁
(2) 手动调用session.invalidate (可以设置一个按钮(href实现),点击实现购物车的清空)
- (3)Session过期时销毁,设置session过期的方法:
1、配置web.xml
2、调用session对象 setMaxInactiveInterval(int interval) 单位是秒
(三)Session的应用举例
Session的一个常见应用就是购物车功能的实现:
JSTL:一个开源的JSP标签库,使用JSTL可以取代在传统JSP程序中嵌入java代码的做法,大大提高了代码的可维护性。(注意:使用JSTL之前,需要对JSTL进行配置)
表达式语言EL(Expression
Language),通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及可维护性。
Session原理、生命周期及购物车功能的实现的更多相关文章
- Session的生命周期和工作原理
一.什么是Session,如何使用?Session是用于存放用户与web服务器之间的会话,即服务器为客户端开辟的存储空间. 由于客户端与服务器之间的会话是无状态的机制,Session则可用于关联访问, ...
- 【转载】Session的生命周期
http://www.cnblogs.com/binger/archive/2013/03/19/2970171.html 以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的 ...
- cookie和session的区别,session的生命周期,
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...
- cookie和session的区别及session的生命周期
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录 ...
- session的生命周期是怎样的
session的生命周期是怎样的 一.总结 一句话总结:Tomcat中Session的默认失效时间为20分钟.如果我们敲代码的时候把它设置成1个月,那么这一个月的数据会代替默认20分钟的数据,使ses ...
- Session的生命周期之关于浏览器关闭后的Session
Session是JSP的九大内置对象中的一个,它可以保存当前用户的各种的状态信息. 初次接触Session时认为Session的生命周期是从浏览器打开一个窗口发送请求开始,到浏览器窗口关闭结束.其实这 ...
- Cookie 和 Session 的区别和联系?session的生命周期?多个服务器部署session的管理?
一.session 和 cookie 1.cookie Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie.当下次客户端再向服务端发起请求时,客户端会 ...
- Session 的生命周期
#region EntityMap /// <summary> /// 实体类值的访问器,线程安全 /// </summary> // ...
- node中session存储与销毁,及session的生命周期
1.首先在使用session之前需要先配置session的过期时间等,在入口文件app.js中 app.use(express.session({ cookie: { maxAge: config.g ...
随机推荐
- SQL SERVER Date列和Time列合并成一列处理报表数据
问题原由: intouch项目中,利用intouch脚本来存储数据时,存入的时间格式为:date,time分开存储.在报表需求中,有需要利用查询两个时间段之间的数据. 问题解决: 1.直接写脚本(写出 ...
- yum 卸载
# yum list installed | grep [软件名] #yum -y remove [软件名]
- 遥远的国度 (树链剖分换根),洛谷P3979
析:显然,若没有换根操作,则为树链剖分板子题,但是这道题我们考虑换根操作 考虑这样一个性质:在一棵树上,两点的距离路径是唯一的!! 也就是说,我们在修改路径上的点权时,不必考虑根在哪里,直接利用模板修 ...
- 获取windows 操作系统下的硬件或操作系统信息等
奇怪的工作,制作的是一款办公应用软件,领导却要求我统计用户计算机的物理信息,什么CPU的型号.核心数,什么内存信息等各种乱七八糟的用户信息.我想问,现在用户的信息就这么没有隐私性了么?想获取就获取传递 ...
- openresty——yum安装 配置 使用 错误处理 docker方式安装
yum方式安装 wget https://openresty.org/package/centos/openresty.repo mv openresty.repo /etc/yum.repos.d/ ...
- linux笔记全(无图版)
1.ls 查看当前目录下的所有内容 黑色的是文件,蓝色的是文件夹,也就是目录 2.rm -f anaconda-ks. cfg 彻底删除文件(如不确定,则需要先保存备份,也就是快照) 3.ifconf ...
- 如何读懂Framework源码?如何从应用深入到Framework?
如何读懂Framework源码? 首先,我也是一个应用层开发者,我想大部分有"如何读懂Framework源码?"这个疑问的,应该大都是应用层开发. 那对于我们来讲,读源码最大的问题 ...
- CircuitBreaker断路器Fallback如何获取异常
在Spring Cloud 2020新版里, 可以使用新版的 CircuitBreaker 断路器, 可以配置Fallback, 可以是内部的, 也可以是外部的Fallback. 内部 Fallbac ...
- 寻找写代码感觉(二)之 Spring Boot 项目属性配置
一.前言 写代码就和恋爱一样,有反馈就要趁热打铁,搞完了项目搭建,接下来就来搞搞项目配置. 二.IDEA设置 1.编码配置 这里所说的就是代码的编码格式,你可以不设置,但是可能要面临的是,很多未知的麻 ...
- iOS-block循环引用详解和应用
Block循环引用 什么情况下block会造成循环引用 ARC 情况下 block为了保证代码块内部对象不被提前释放,会对block中的对象进行强引用,就相当于持有了其中的对象,而如果此时block中 ...