Java Web学习笔记之session入门

2018-05-14  本文已影响19人  codingXiaxw

1.HttpSession概述

2.HttpSession的作用

3.案例:演示保存用户登录信息

失败:保存错误信息到request域,转发到login.jsp。(login.jsp中显示request域中的错误信息)
成功:保存用户信息到sussion域中,重定向到succ1.jsp页面,显示session域中的用户信息。

各页面代码如下:

<font align="center">login.jsp</font>

image

<font align="center">LoginServlet.java</font>

image

<font align="center">succ1.jsp</font>

image

4.HttpSession的原理(需要理解)

初入HttpSession原理

1.每当客户端与服务器建立了一个会话,服务器就会为该客户端建立一个session对象,将session对象保存在服务器端的同时服务器还会给客户端发送一个带有JSESSIONID的Cookie(放在响应头中);2.当客户端在不关闭浏览器的情况下再次访问该服务器时,客户端就会通过这个JSESSIONID来取出保存在服务器端相应session对象。3.当客户关闭了浏览器时,意味着与服务器断开连接然后会话session也随着就结束了,此时能识别存在服务器端的HttpSession对象的JSESSIONID也就跟着丢失了。4.但是此HttpSession对象依旧保存在服务器端。5.当再次打开浏览器时,就会重新建立新连接,服务器给过来的JSESSIONID也是新的了。

这就好比你第一次去银行办卡,1.银行给你办了一张带有独特帐号的银行卡(JSESSIONID)然后你回家了,你存在银行卡里的钱保存在银行里(相应的HttpSession对象)(对应上面的步骤1);2.当你再次访问该银行取钱时,你首先要给银行你的带有独特帐号的银行卡(将JSESSIONID给服务器),然后银行会给你要取的钱(获取相应的HttpSession对象)(对应上面的步骤2)。3.当你丢失了你的银行卡,而银行的工作人员又不小心在数据库中删除了你银行卡对应的帐号(对应上面的步骤3关闭浏览器)。4.但是你的钱还保存在银行里(对应上面的步骤4)。5.这时当你再次返回该银行时,你就需要重新办一张银行卡(由于工作人员删除了你原先的帐号所以不能补办),并且新办理的银行卡会对应新的帐号(新的JSESSIONID)。

对于断开连接后保存在服务器端的HttpSession对象不会一直存在,它有它的生命时间,一般为30分钟,到达这个时间后服务器端就会将它删除。还有一种情况就是当客户端与服务器建立一个会话后,但是该客户却很长时间不对服务器发请求,当时间到达该session对象存活的时间后服务器也会删除该session对象。就比如你登录了淘宝的主页,然后你半天时间不去碰电脑,当你想起要去购物时,你点击一个超链接后服务器就会要求你重新登录,因为由于你长时间不给服务器发起请求,服务器就误认为这是一个没用的session,然后服务器就将它删了。

深入HttpSession原理

首先纠正下上面的一句话,其实当客户端与服务器建立连接时,虽然会话是建立了但是服务器不会立刻建立HttpSession对象(因为对象在服务器端存活时间较长,所以服务器没那么傻),只有当客户端请求的Servlet中调用了request.getSession()方法要求获取HttpSession对象时服务器才会创建;但是若请求的是jsp页面,则服务器会立刻创建HttpSession对象,因为jsp对应的Servlet类中已经默认调用了request.getSession()。

调用request.getSession()方法后服务器的做法

  1. 如果JSESSIONID不存在,则创建session,把session保存起来并把新创建的JSESSIONID保存到Cookie中。
  2. 如果JSESSIONID存在,通过JSESSIONID查找session对象,如果没有查找到,则创建session并保存起来,把新创建的JSESSIONID保存到Cookie中。
  3. 如果JSESSIONID存在,通过JSESSIONID查找到了session对象,那么就不会再创建session对象了。

5.HttpSession的其它方法

2018.3.19更

欢迎加入我的Java交流1群:659957958。群里目前已有1800人,每天都非常活跃,但为了筛选掉那些不怀好意的朋友进来搞破坏,所以目前入群方式已改成了付费方式,你只需要支付9块钱,即可获取到群文件中的所有干货以及群里面各位前辈们的疑惑解答;为了鼓励良好风气的发展,让每个新人提出的问题都得到解决,所以我将得到的入群收费收入都以红包的形式发放到那些主动给新手们解决疑惑的朋友手中。在这里,我们除了谈技术,还谈生活、谈理想;在这里,我们为你的学习方向指明方向,为你以后的求职道路提供指路明灯;在这里,我们把所有好用的干货都与你分享。还在等什么,快加入我们吧!

2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626 。群2作为群1的附属群,除了日常的技术交流、资料分享、学习方向指明外,还会在每年互联网的秋春招时节在群内发布大量的互联网内推方式,话不多说,快上车吧!


6.联系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.

上一篇 下一篇

猜你喜欢

热点阅读