HttpSession简单介绍

简介:

  • HttpSession是由JavaWeb提供的,用来会话跟踪的类.session是服务端对象,保存在服务器端.
  • HttpSession是Servilet三大域对象之一(request,session,application),所以可以通过get/set/removeAttribute设置属性
  • HttpSession底层依赖Cookie,或者URL重写,因为需要靠它们获取sessionId

HttpSession的作用:

  • 会话范围:会话范围是某个用户首次访问服务器开始,到用户关闭浏览器结束
    会话:一个用户对服务器的多次连贯性请求,所谓连贯性,就是该用户多次请求中间没有关闭浏览器.
  • 服务器会为每个客户端创建一个sesison对象,session就好比客户在服务器端的账户,他们被服务器保存到一个map中,这个map称之为session缓存.
  • servlet中通过request.getSession()获得session对象
  • jsp中因为session是jsp的内置对象,可以直接使用,不需创建

session相关主要方法:

void setAttribute(String name,Object value):设置session
Object getAttribute(String name):获取session某个属性值
void removeAttribute(String name):删除session中某个属性值

session其他方法:

String getId():获取sessionId,值为由0-F大写字母和数字组成的32位字符串
int getMaxInactiveInterval():获取session的最大存活时间,默认30分钟
void invalidate():让session失效,再次getSession()再创建一个新的session,可用于用户退出登录
boolean isNew():如果原来没有session,则新建session并返回true,否则false

session最大存活时间

配置:web.xml中配置,默认时间30,单位分钟

<session-config>
		<session-timeout>30</session-timeout>
</session-config>

HttpSession原理

  • 使用request.getSession获取session,session存在后会将sessionid保存在cookie中由浏览器保存
  • 如果sessionId不存在,则创建session,把session保存再来,新创建的sesisonId保存到Cookie中
    如果sessionId存在,则通过sessionId查找session对象,如果没有找到,则创建session,把session保存再来,新创建的sesisonId保存到Cookie中
  • 如果sessionId存在,通过sesisonId超找到了session对象,那么就不会创建session对象.
  • 如果创建了新的session,浏览器会得到一个包含sesisonId的Cookie,这个Cookie的生命时间为-1,即存在浏览器内存中,关闭浏览器则该Cookie消失
    下次请求时,再次执行request.getSession()时,因为可以通过Cookie中的sessionId找到session对象,所以与上一次请求的是同一个session对象
  • 服务器不会马上创建一个session对象,只有第一次获取request.getSession()的时候,才会创建
  • 如果服务器第一次访问的是jsp,jsp中由于翻译为java类时,有创建session对象,所以一定存在session
  • request.getSession()/request.getSession(true):没有session则创建session并返回session.
    request.getSession(false):没有session时,不创建session,返回null

URL重写(了解):

  • session依赖Cookie,目的是让客户端发出请求时归还sessionId,这样才能找到对应的session
    如果浏览器客户端禁用了Cookie,那么服务端就无法得到sessionId,即session无用了
  • 解决方法:使用URL重写来替代Cookie
    让网站所有的超链接,表单中都添加一个特殊的请求参数,即sessionId
    这样服务器可以通过获取请求参数得到sessionId,从而得到session对象
  • 如果禁用Cookie,可以通过在单个url上添加sessionId来进行继续使用session–>即类似/learn_jsp/AServlet;JSESSION=<%= session.getId()%>,中间以";"隔开
  • response.encoderURL(String url):该方法会对url进行智能的重写,当请求中没有归还sessionId时,那么该方法就会重写url,否则不重写!url必须指向本站的url
  • URL重写就是把所有页面中的路径,都使用response.encodeURL(“url路径”);处理一下,也就是将sessionId改为从URL路径上传给服务器而不是通过Cookie.
发布了20 篇原创文章 · 获赞 0 · 访问量 267
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览