session的学习

session的意思就是会话,这里和cookie一样也是一种会话跟踪技术,与cookie存放在本地不同session是存放在服务器当中的。

1)seesion可以跨请求,HttpSession当中具有三个方法,对session当中的数据进行操作。

增加:session.setAttribute

读取:session.getAttribute

删除:session.removeAttribute 

对于request.getSession();方法,如果没有session则会自动创建session,可以通过设置request.getSession(false);来只读不建。

2)一个会话对应一个session,工作原理:

①写入session列表

服务器对session是以map的形式管理的,这个map被称为session列表。该map的key是一个32位长度的随机串,被称为JSessionID,value则是session对象的引用(存在于堆当中)。

当用户第一次提交请求时,服务器执行到request.getSession()方法后会自动生成一个Map.Entry对象,key为根据算法形成的JSessionID,value则是新创建的session对象。

②服务器生产并发送cookie

将seesion信息写入session列表后,系统还会将"JSessionID"作为name,JSessionID的值作为value,以cookie的形式存放到响应头中,发送到客户端。

③客户端接收并发送cookie

客户端接收到这个cookie之后将其存放到缓存当中,当用户提交第二次请求时,会将缓存当中的这个cookie随着请求头,一起发送到服务器。

④从session列表中查询

服务端从请求中读取到客户端发送来的cookie,并根据JSessionID的值从session列表中查询相应key对应的session对象,再去session域属性进行读写操作。

3)session的失效

可以设置session的失效时间,应用于在某个网页长时间没有操作会弹出重新登录等。

session的失效标志着会话的结束。对于用户来说关闭浏览器标志着会话的结束,但是session的失效才标志着会话的结束。

 cookie禁用后的session跟踪问题

1)对于重定向可以使用response.encodeRedirectURL(uri)方法重写url来进行session跟踪

2)非重定向可以使用response.encodeURL(uri)方法重写url来进行session跟踪

但是这两种方法会将JSessionID添加到url后面,这样会比禁用cookie更加不安全。

 

posted @ 2020-03-02 23:57  yamiya  阅读(109)  评论(0编辑  收藏  举报