JavaWeb-会话

会话

基本

关于cookie,第一次访问由服务器放在响应头里面返回给客户端,以后再次访问页面时(不同页面),客户端都会携带该cookie,,因为客户端即浏览器,浏览器不关闭,不更换cookie,假如没有设置cookie过期时间。
cookie缺陷,不安全性,每个cookie最大4k,放的内容小。然后可以用js操作cookie。建议隐私性的东西不要保存在cookie上

session,也是服务器为客户端创建一个Session对象,把sessionId放入cookie返回给客户端(新建了个Session对象自动返回),客户端使用cookie保存该id,当再次访问服务器时,cookie发送了JSessionId给服务器,服务器进行 getSessionById类似的操作,取到Session对象,来进行会话的进行。
第二次访问验证是否是同一个Session时,可以先req.getSession.getAttribute(“第一次赋予的key名”);

Session常用方法

  • removeAttribute();
  • getCreationTime();获得第一次创建回话的时间
  • getLastAccessedTime():返回容器最后一次得到该会话ID的请求时间。

  • setMaxInactiveInterval(int interval);对于会话制定客户请求设置最大的间隔时间,-1为永不过期;以秒为单位

  • getMaxInactiveInterval(int interval);

  • invalidate();会话结束

  • getId();返回JSESSIONID

进阶

cookie,setPath,getPath,例如,day06/servlet/loginServlet发给客户端的cookie。
此时cookie的有效路径是servlet,意思在访问servlet包下的所有servlet时,客户端的cookie都是有效的。。
setMaxAge和getMaxAge是设置cookie的有效期限,免登陆实现思路???登陆后给一个cookie,设置的maxAge够长的话,关掉浏览器后还有cookie,因为cookie已经做成了一个缓冲文件放在电脑的某个位置,设置时长实际是实际多久来删除该文件

删除cookie时设置 cookie.setMaxAge为0即可,主要删除cookie时的path要和设置cookie时的path一致, cookie.setPath(“路径”)

session生命周期
第一次访问servlet中 request的getSession时候得到session, 30分钟没人用后,session才会清洗session,而session是服务器管理的。

<session-timeout> 10 </session-timeout> 10分钟后摧毁session

session.invalidate()摧毁session方法2.

request.getSession(false);//只获取session,不创建session
显示购物车的时候用这个代码,查看已经放入购物车的物品的servlet的时候。
也可以request.getSession(),只是性能不太好。

什么才叫使用了session???
session没有被存取,叫未使用session,不活动时间。

电子商务网站必备流程,Session中Cookie的持久(在第一次getSession处进行)


访问Session的时候,服务器会返回一个cookie,包含了SessionId,再次访问的时候回解析cookie,看对照哪个Session。
想保持SessionID的存在,不会30分钟后创建新的Session,那么设置该Session返回的Cookie 的MaxAges。
得到session的SessionId,回写给Cookie的
session.getId();
Cookie cookie = new Cookie("JSESSIONID",sessionid);
cookie.setPath("路径包");
cookie.setMaxAge(30*60);
response.addCookie(cookie);

用户禁用Cookie时候怎么解决。
URL重写
点击超链接的时候把Cookie带来。然后每个session后面创建sessionID号
前提条件要先创建session,才能用encodeURL将JsessionId取得出来并添加到想要访问的路径的后面 ;JSIND=XXXXXX

response.encodeURL(发送session的Servlet),
response.encodeURL(验证session的Servlet);
encodeURL相当于,在这个servlet链接后面补上一个SessionId附加在cookie里面。

注意,刷新后,sessionId发生变化,这是因为没有在URL中绑定JSID,服务器认为你没有获得session,所以每次都给予新的JSESSIONID

假如服务器发现 已经带有了Cookie,则不会重写超链接URL。

注意,此时不能做session的持久化,因为session 的持久化是依赖于cookie,而用户禁用了cookie,所以不能做持久化,以为放入购物车的商品,关闭了浏览器之后再来访问,不能取得之前放入购物车的商品。

注意,刷新之后。。sessionId也重置???如何解决??不能解决!

getContextPath()得到项目名(根目录)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值