美文网首页
servlet学习(十二):会话之session

servlet学习(十二):会话之session

作者: 程序员三千_ | 来源:发表于2019-02-26 11:28 被阅读10次

session简介

    在WEB开发中,服务器可以为每个客户端浏览器创建一个session对象,默认情况下一个浏览器独占一个session对象。在实际应用当中,服务器程序可以把一些敏感数据写到用户浏览器独占的session中可以提高安全性,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

session和cookie的主要区别是:

    session存储在服务器端

    cookie存储在客户端

JavaEE中的session

在javax.servlet.http包下有个HttpSession类,通过该类就可以操作session。

获取Session对象的方式:通过调用request对象中的getSession()方法就可以获取Session对象了,不需要手动new创建。

Session中常用的方法:

    public void setAttribute(String name, Object value)

        该方法用于向 Session 的中放入一个键值对。

    public Object getAttribute(String name)

        该方法用于从 Session 中根据名字获取值。

    public void removeAttribute(String name)    

        该方法用于从Session中删除数据。

代码示例:

创建一个名为SessionTest01的servlet用来接收用户传入的数据并放到session对象中:

创建一个名为SessionTest02的servlet从session对象中取得之前用户传入的数据:

首先访问第一个servlet,在url中写上name的数据:

localhost:8080/wdy/session01?name=monkey

再访问第二个servlet:

localhost:8080/wdy/session02

在eclipse控制台中可以看到第一个servlet中传入的name数据

再打开另外一个浏览器直接访问第二个servlet:

localhost:8080/wdy/session02

此时控制台中打印的结果是null

这说明Web开发中的 Session机制会为每个浏览器分配了一个 Session。即一个浏览器一个 Session,不同的Session之间的数据不能共享。


session工作原理

    服务器会为每个浏览器分配一个session,每个浏览器只能访问自己的session对象,可http协议是无状态的,那服务器是如何识别这些浏览器的呢?

服务器对Session对象是以Map的形式进行管理的,每创建一个session对象,服务器都会向该Map中的 key放入一个32位长度的随机串,这个随机串称为JSessionID, 之后将该session对象的引用放入到map的value中。

session放入到Map之后,服务器还会自动将”JSESSIONID”作为 name,32位长度的随机串作为value,放到cookie中并发送到客户端。该cookie会默认放到浏览器的缓存中,只要浏览器不关闭就一直存在。

当浏览器第二次向服务器发送请求时会携带该cookie,服务器接收到之后会根据JSessionID从Map中找到与之对应的session对象。


Session的失效

    若某个Session 在指定的时间范围内一直未被访问,那么 Session 将超时,即将失效。在 web.xml 中可以通过标签设置 Session 的超时时间,单位为分钟。默认 Session 的超时时间为 30 分钟。这个时间并不是从 Session 被创建开始计时的生命周期时长,而是从最后一次被访问开始计时,在指定的时长内一直未被访问的时长。


相关文章

网友评论

      本文标题:servlet学习(十二):会话之session

      本文链接:https://www.haomeiwen.com/subject/lbxayqtx.html