JavaWeb-会话

来源:互联网 发布:网络订票在代办点取票 编辑:程序博客网 时间:2024/04/29 21:34

会话

基本

关于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分钟后摧毁sessionsession.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