在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原理、生命周期及购物车功能的实现的更多相关文章

  1. Session的生命周期和工作原理

    一.什么是Session,如何使用?Session是用于存放用户与web服务器之间的会话,即服务器为客户端开辟的存储空间. 由于客户端与服务器之间的会话是无状态的机制,Session则可用于关联访问, ...

  2. 【转载】Session的生命周期

    http://www.cnblogs.com/binger/archive/2013/03/19/2970171.html 以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的 ...

  3. cookie和session的区别,session的生命周期,

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  4. cookie和session的区别及session的生命周期

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录 ...

  5. session的生命周期是怎样的

    session的生命周期是怎样的 一.总结 一句话总结:Tomcat中Session的默认失效时间为20分钟.如果我们敲代码的时候把它设置成1个月,那么这一个月的数据会代替默认20分钟的数据,使ses ...

  6. Session的生命周期之关于浏览器关闭后的Session

    Session是JSP的九大内置对象中的一个,它可以保存当前用户的各种的状态信息. 初次接触Session时认为Session的生命周期是从浏览器打开一个窗口发送请求开始,到浏览器窗口关闭结束.其实这 ...

  7. Cookie 和 Session 的区别和联系?session的生命周期?多个服务器部署session的管理?

    一.session 和 cookie 1.cookie Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie.当下次客户端再向服务端发起请求时,客户端会 ...

  8. Session 的生命周期

    #region EntityMap /// <summary>        /// 实体类值的访问器,线程安全        /// </summary>        // ...

  9. node中session存储与销毁,及session的生命周期

    1.首先在使用session之前需要先配置session的过期时间等,在入口文件app.js中 app.use(express.session({ cookie: { maxAge: config.g ...

随机推荐

  1. Typora PicGo Gitee博客写作好搭档

    利用Gitee仓库存放图片 1.首先在Gitee上创建一个公开的仓库,我这里创建了一个名叫resources的仓库: 2.在Gitee中获取私人令牌(个人设置界面中): 安装配置PicGo 1.下载自 ...

  2. Hadoop 3.1.1 - 概述 - 集群安装

    Hadoop 集群安装 目标 本文描述了如何从少数节点到包含上千节点的大规模集群上安装和配置 Hadoop 集群.如果只是为了尝试,你可以先从单台机器上安装开始(参阅单节点安装). 本文并不包含诸如安 ...

  3. 移动APP我们需要关注什么

    移动APP关注的点比web或者PC上的程序更多 1.测试用例的设计 移动互联网的快节奏,要放弃传统的测试用例编写方式,不需要写详细的测试用例,采用罗列测试点的方式如思维导图,这样既节省时间又能够直观清 ...

  4. Java面向对象14——接口

    接口  package oop.demon01.demon09; ​ //抽象思维~Java ​ //interface 定义的关键字 , 接口都需要有实现类 public interface Use ...

  5. 阿里饿死了么Android面试凉经,两轮面完被虐哭了,怒清购物车。。。卸载饿死了么

    大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助. 最近跟一个朋友聊天,他漫不经心地复习了几个月,就去参加了饿了么面试,第二面结束后,嗯,挂了 ...

  6. 单机版搭建kubernetes(K8s)

    准备 云原生的概念越来越火,忍不住去看了看kubernetes,初次接触,晕晕乎乎的,于是不管三七二十一,先搭建个单机版的再说(没钱买服务器,目前也懒得装虚拟机),跑起来也算是第一步吧.网上教程一顿搜 ...

  7. gRPC学习之三:初试GO版gRPC开发

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. SpringMVC学习09(文件的上传和下载)

    文件上传和下载 准备工作 文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况 ...

  9. 玩转Java8日期工具类-基础

    内容基于的是 Java8官方文档,以及Java时间类总结 的总结.BTW:其实具体方法的使用直接在IDEA中看源码更方便直接. 1.老一辈:Java.util.Date Java.sql.Date J ...

  10. 北航OO第四单元——UML图解析

    北航OO第四单元--UML图解析 作业要求简析 刚接触本次作业可能需要花上一会才能搞清楚到底是要我们写个啥,在这里简单说一下: UML图的保存格式.mdj文件是以json文件的形式存储的,将每一个Um ...