Session详解

四大域对象

1.概念

    称为实体类实例,对应数据库字段。域:翻译英文未field,即我们常用的字段或属性。作用是用于保存数据,获取数据,可以在不同的动态资源之间共享数据。

2.包含的对象

 (1)Session域

    A: 产生: 第一次调用 request.getSession()时产生

    B:作用: 存储访问该程序的一个用户的信息

    C: 生命周期: 第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭,没有到期的session也会跟着销毁。如果调用session提供的invalidate(),可以立即销毁session

    D: 作用范围: 一次会话(服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的),本人认为:在session没有过期时,只要程序不关闭,就存在(服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的,否则Session不存在);同一个用户(区别ServletContent)

 (2)Request域

    A: 产生: 在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束

    B:作用: 在整个请求过程中共享数据,如servlet处理的结果可以放到request中传到jsp

    C: 生命周期: 整个请求过程,请求结束,request生命消失

    D: 作用范围::整个请求过程

 (3)ServletContent域

    A: 产生: 服务器启动时产生

    B: 作用: 在所有请求该程序的用户之间共享数据

    C: 生命周期: 服务器开始,其就存在,服务器关闭,其才释放

    D: 作用范围: 是一个全局的储存信息的空间,所有的用户都可访问共享一个,即整个WEB应用

 (4)PageContent域

    A: 产生: 当对JSP的请求时

    B: 作用: 访问JSP之间的共享数据

    C: 生命周期: 当对JSP的请求开始,当相应结束时销毁

    D: 作用范围: 当前整个JSP页面,是四大作用域中最小的一个

【总结】

  • ServletContext:servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息
  • request:一个用户可有多
  • session:一个用户一个
  • pageContent:当前jsp页面
  • 这四个都是JSP对象,但是前三个(session,request,servletContent也是servlet域对象)

九大内置对象

1.概念

  是在jsp页面中无需创建就可以直接使用的变量

2.包含的对象

  (1) request HttpServletRequest
  (2) response HttpServletResponse
  (3) config ServletConfig
  (4) application ServletContext
  (5) session HttpSession
  (6) exception Throwable
  (7) page Object(this)
  (8) out JspWriter
  (9) pageContext PageContext

Session

1.概念

  session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session

2.产生

  第一次调用 request.getSession()时产生(误区:很多人都认为时第一次访问jsp时产生,这样认为是不对的,之所以有时第一次访问一个servlet时,该service的逻辑只是返回一个逻辑视图,没有其它业务,但是查看返回的页面会有JSESSIONID,这是因为如果JSP没有显示的使用 <%@page session=“false”%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历)

3.存放位置

  一般情况下,session都是存储在内存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空,如果设置了session的持久化特性,服务器就会把session保存到硬盘上,当服务器进程重新启动或这些信息将能够被再次使用,Weblogic Server支持的持久性方式包括文件、数据库、客户端cookie保存和复制

4.作用范围

   一次会话

5.消失情况

  • 程序调用HttpSession.invalidate();
  • 距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;
  • 服务器进程被停止(非持久session)

6.更多详情

   参考文章:https://www.cnblogs.com/lonelydreamer/p/6169469.html

SessionId

1.概念

   标识session的一个记号(自己定义的)

2.产生

   产生session的同时会产生一个标识该session的记号,即sessionId

3.存放位置

   存放在客户端的cookie中

4.作用范围

   同cookie的作用范围,请看下面cookie的讲解

5.消失情况

   同cookie消失而消失(但是:之所以当关闭窗口但session未消失时,重新请求jsp,产生的JSESSIONID和关闭的窗口产生的一样,是因为session是一样的,所以再次获取的该session的sessionId是一样的

5.产生机制

  当第一次调用HttpServletRequest.getSession(true) 产生session时会产生一个sessionId,然后返回到客户端并存放在cookie,当再次请求时,sessionId就伴随cookie给到服务端,然后服务端根据sessionId获取session(之所以当服务端的session没过期而清除缓存时,产生的sessionId和之前不一样,是因为清除缓存时cookie也给清除了,而此时请求服务端时自然没有携带sessionId [相当于第一次请求服务器],此时服务端拿不到sessinId就认为没有session,所以会生成一个新的sessin,自然会生成新的sessinId,然后返给客户端

  1)第一次访问服务器的时候,会在响应头里面看到Set-Cookie信息(只有在首次访问服务器的时候才会在响应头中出现该信息)

Session详解_第1张图片
  此cookie由于没有设置cookie有效日期,所以在关闭浏览器的情况下会丢失掉这个cookie

  2)当再次请求的时候(非首次请求),浏览器会在请求头里将cookie发送给服务器(每次请求都是这样)

Session详解_第2张图片

   sessionId执行的流程:

Session详解_第3张图片

Cookie

1.概念

  cookie在浏览器和服务器间来回传递的一段文本

2.产生

  第一次请求服务器自动创建

3.存放位置

  保存在用户硬盘上的某个文件夹中,保存在客户端(服务端产生,而存放在客户端)

4.作用范围

  一次会话中

5.消失情况

  • 超时
  • 清缓存
  • 如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie。如果在浏览器中设置了cookie的过期时间,cookie被保存在硬盘中,关闭浏览器后,cookie数据仍然存在,直到过期时间结束才消失

【session与cookie区别】

  • session存在服务端,cookie存在客户端
  • session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie;cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie;单个session保存数据大小取决于内存大小,内存越大,存的越多,所以原则上没限制
  • 将登陆信息等重要信息存放为session;其他信息如果需要保留,可以放在cookie中
  • cookie只能保存字符串类型,以文本的方式;session通过类似与Hashtable的数据结构来保存,能支持任何类型的对象(session中可含有多个对象)

Local Storage

1.概念

  html5新增的一个本地存储API,是一个局部存储器。

2.作用

  解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。主要是用来作为本地存储来使用的

3.产生

  伴随jsp页面而产生

4.存放位置

  保存在用户硬盘上的某个文件夹中,保存在客户端

5.作用范围

  遵循同源策略,相同网站才能共享

6.消失情况

  localStorage存在硬盘上(相当于前端的一个小数据库),本身没有时效性(清缓存在清不掉,之所以有时清缓存,在浏览器的Application中没有了,是因为该页面加载时就没有写入localStorage,并不是在本地文件中读取的localStorage然后写入浏览器)

7.查看local Storage存放在磁盘上的具体位置

  以Chrome为例:在Chrome浏览器的地址栏输入Chrome:Version查看Chrome浏览器保存文件的位置

Session详解_第4张图片
  找到leveldb文件夹下面一个.log文件,打开虽然乱码,但是还是可看到存入的信息(经常会遇到打开网页需要登录的情况,下次登录就不用输入了,信息就是保存在这个文件中了)

8.生命周期

  永久

9.更多详情

  参考文章:https://www.cnblogs.com/st-leslie/p/5617130.html(讲的很好)

Session Storage

1.概念

  html5新增的一个本地存储API,是一个局部存储器。

2.作用

  用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据

3.产生

  伴随jsp页面而产生

4.存放位置

  保存在用户硬盘上的某个文件夹中,保存在客户端

5.作用范围

  只在本窗体内

6.消失情况

  窗口关闭(虽然是同源网站,但是是不同窗口,也不共享)

7.生命周期

  临时,与页面同生命

8.查看Session Storage存放在磁盘上的具体位置

  同 Local Storage目录下有个Session Storage文件夹,里面也有个.log文件,应该是存放session Storage数据的,但是经查看内容,并没有找到相应的内容,不知道为啥(有知道的大神期待你的留言)

9.更多详情

  参考文章:https://blog.csdn.net/mjzhang1993/article/details/70820868
这个暂时还没用到过,但度娘说适用于单页程序中传递信息

【Cookie,Local Storage,Session Storage区别】

  区别讲解见:https://www.cnblogs.com/endlessmy/p/8399366.html

你可能感兴趣的:(JAVA)