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开发中对对象的引用,从而规范页面代码,增加程序的可读性及可维护性。

原文地址:https://www.cnblogs.com/zhangyanran/p/10082231.html

时间: 2024-10-01 07:57:03

Session原理、生命周期及购物车功能的实现的相关文章

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

这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie 里的内容来判断使用者,送出特定的网页内容给你. Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie 来辨认使用者,以方便送出使用者量身定做的内容

iOS Life Cycle of a URL Session URLSession生命周期 开发者文档翻译(一)

最近想把iOS网络这一块搞通.貌似国内中文资料太少了,无奈只能自己动手翻译开发者文档.决定抽时间把网络部分的全部翻译出来,工程浩大啊.有人想参与的话欢迎留言. 英文原文:developer URL Session的生命周期 你可以使用NSURLSession在两个方面:系统提供的代理和你自己的代理.一般来说,如果有下面的情况你必须使用自己的代理: 1.使用后台下载或者上传内容,同时你的app没有运行. 2.执行自定义的身份验证. 3.执行自定义的SSL证书验证. 4.决定是否应该下载到磁盘或者显

servlet的session的生命周期

谈到javaweb首先想到的就是servlet,说道servlet就会想到servlet的生命周期 说道servlet的生命周期 就绕不过servlet的三个方法init service destroy 当我们将web项目部署到服务器,服务器启动的时候,这个时候servlet还没创建,,服务器启动了  开始对外提供服务,客户端可以访问了, 当某一个客户端第一次访问时候此servlet时候------>服务器找不到servlet对象------->这个时候服务器就会创建servlet对象,并且调

ASP.NET整理:Cookie,Application,Session,页面生命周期

一.设置Cookie的2种方式 1.    Repsonse.Cookie[“名”] = 值; 2.    HttpCookie hcCookie = new HttpCookie(“名”,值); hcCookie.Expires = Date.Now.AddDays(1);这里可以增加月 Response.Cookies.Add(hcCookie); 从Cookie中取值: string str = Response.Cookies[“名”].Value; 注意: 1.Cookie若没指定时间

web 项目中 SQLAlchemy session 的生命周期管理

假设已有一个 Session 工厂类: Session = sessionmaker(bind=some_engine) 那么 session 实例的生命周期可以为: 最短模式 -- 每次请求新建一个 session,用完就 close @contextmanager def get_session_scope(): try: s = Session() yield s s.commit() except: s.rollback() finally: s.close() 这种模式不适合 web

servlet生命周期已经session的生命周期

简单记笔记 1,创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建.(默认) 2,调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次: 3,响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的. 4,  在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象. session生命周期 session是服

session的生命周期

Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP.Servlet等程序时才会创建Session,只访问HTML.IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session. Session什么时候失效? 1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效.Tomcat中Session的默认失效时

9.session的生命周期

1.创建 当客户端第一次访问某个jsp或者Servlet的时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发送请求的时候,都会将此SessionId携带过去,服务端会对此SessionId进行校验. 2.活动 1)某次会话中通过超链接打开的新页面属于同一次会话. 2)只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一个项目资源时属于同一次会话. 3)除非本次会话的所有页面都关闭后再重新访问某个jsp或者servlet将会创建新的会话 4)注意:原有会话还存在,只是

C# Session的生命周期问题

/// <summary> /// 设置session /// </summary> /// <param name="name">session 名</param> /// <param name="val">session 值</param> public static void SetSession(string name, object val) { HttpContext.Curren