Session

HttpSession概述

HttpSession是由JavaWeb提供的,用来会话跟踪的类。session是服务器端对象,保存在服务器端。
HttpSession是Servlet三大域对象之一(request、session、application(ServletContext)),所以它也有setAttribute()、getAttribute()、removeAttribute()方法。
HttpSession底层依赖Cookie,或是URL重写。

HttpSession的作用

会话范围:会划范围是某个用户从首次访问服务器开始,到用户关闭浏览器结束。
Servlet中得到session对象:HttpSession session = request.getSession();
jsp中得到Session对象:Session是jsp内置对象不用创建可以直接使用。
Session域的相关方法:

void setAttribute(String name,Object value);
object getAttribute(String name);
void removeAttribute(String name);

HttpSession原理

request.getSession()方法
获取Cookie中的JSESSIONID:

如果sessionId不存在,创建session,把session保存起来,把新创建的sessionId保存到Cookie中
如果Session存在,通过sessionId查找session对象,如果没查到,创建session,把session保存起来,把新创建的sessionId保存到Cookie中
如果sessionId存在,通过sessionId查找到了session对象,那么就不再创建session对象了
返回session

如果创建了新的Session,浏览器会得到一个包含了sessionId的Cookie,这个Cookie的声明为-1,即只在浏览器内存中存在,如果不关闭浏览器,那么Cookie一直存在。
JSP会自动创建Session
Servlet不会,只有在第一次获取session时,才会创建reques.getSession();

reques.getSession(false):如果session缓存中(如果Cookie不存在),不存在session,那么返回null,而不会创建session对象

HttpSession的其他方法

String getId():获取sessionId

int getMaxInactiveInterval():获取session可以的最大活动时间(秒),默认为30分钟。当session在30分钟内没有使用,Tomcat会在session池中移除

void invalidate():让session失效。调用这个方法会让session失效

boolean isNew():查看session是否为新。当客户端第一次请求时,服务器为客户端创建session,但这时服务器还没有响应客户端,也就是没有把sessionId返回时为true。request.getSession().isNew():可以判断是在创建session还是返回session

URL重写

当客户端禁用Cookie时,就无法得到sessionId
可以使用URL重写来替代Cookie
response.getSession()检查cookie没有后会寻找jsessionid参数,都没有则创建session

让网站所有的超链接、表单中都添加一个特殊的请求参数,即sessionId
这样服务器可以通过获取请求参数得到sessionId,得到session对象
response.encodeURL(url):该方法对url进行智能重写:当请求中没有归还sessionId这个Cookie,那么该方法会重写url,否则不重写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值