Session

1.Session存在服务器端,服务器会为不同的用户创建不同的Session
2.不同内核浏览器的Session不同
3.同一浏览器的不同标签共享同一个Session,同一浏览器不同打开的窗口共享同一个Session
4.Session的默认失效时间30分钟,一但有人访问,重新置为30分钟
4.Session创建时会生成一个id,并将此id(JSESSIONID)保存到Cookie,写入到浏览器。此Cookie的生命周期为浏览器关闭失效。当在访问服务器时,都会携带JSESSIONID
5.所以浏览器关闭后,就失去了JSESSIONID,便无法获取到之前的session,之前的session过了失效时间便不存在
6.解决浏览器关闭无法获取上次的session的方法
  1.手动添加保存JSESSIONID的cookie,并延长cookie的时间

HttpSession session=request.getSession();
String id=session.getId();
Cookie cookie=new Cookie("JSESSIONID",id);
cookie.setMaxAge(3600);
cookie.setPath("/");
response.addCookie(cookie);

  2.用户禁用cookie的话,使用url重写的方法(关闭浏览器后不能使用上次的session了)

  1.java中采用response的encodeURL(url)(只要是编码的方法都可以好像)进行url重写
servlet中:

HttpSession session = req.getSession();
session.setAttribute("username", "xiaoming");
String url = resp.encodeURL("到某个url时,需要获取session的数据 的url");
resp.sendRedirect(url);
或者:
out.println("<a href='"+url+"'>获取session的页面</a><br/>");
 //url重写前,必须要有request.getSession(),不然不会再超链接后带上JSESSIONID。
结果:<a href="/TestSession;jsessionid=F9412A52243B6B4963CE5FF8BF6592B6">获取session的页面</a>

jsp中:

控制器的代码:
HttpSession session = req.getSession();
session.setAttribute("username", "xiaoming");
req.getRequestDispatcher("/WEB-INF/page/index.jsp").forward(req, resp);
jsp的代码:
<a href="<%=response.encodeURL(“/TestSession”) %>"></a>
jsp的结果:
<body>
  <a href="/TestSession;jsessionid=6312B62AAB8C7A0EE4498507CAA0E0D9">获取session</a>
</body>

这些方法会判断,如果请求没有jsessionid,会自动在链接后加上jsessionid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值