从来就没有救世主  也不靠神仙皇帝  要创造人类的幸福  全靠我们自己  

Cookie和Session

 

1. 会话

  浏览器第一次给服务器发送资源请求,会话建立直到有一方断开连接为止。

  一次会话中包含多次请求和响应

  作用:一次会话范围内的多次请求间共享数据

  方式:

  (1)客户端会话技术:cookie  

  (2)服务器端会话技术:session

 

2. Cookie

  2.1 使用

  ①创建Cookie对象

Cookie(String name,String value)

  ②发送Cookie

//HttpServletResponse
void addCookie(Cookie cookie)

 

  ③另一个Servlet获取Cookie,获取数据

//HttpServletRequest
Cookie[] getCookies()

 

  2.2 其它

(1)一次可以发送多个cookie

(2)cookie可在浏览器中保存多久

  ①默认浏览器关闭后,cookie数据销毁

  ②持久化存储

//Cookie
void setMaxAge(int seconds)  

    正数:cookie数据写到硬盘,以seconds表示cookie存活时间

    负数:默认值,cookie只在内存中,浏览器关闭则销毁

    0:删除cookie信息

    

(3)中文的问题

  tomcat 8之前cookie中不能直接存储中文,之后的可以

  特殊字符支持也不好,要用URLEncoder编解码

(4)cookie获取的范围

  ①默认cookie只在一个web应用内共享,可通过 setPath 设置更大的共享范围(默认setPath是当前web项目)使得cookie可在一个服务器的多个应用中共享 

//Cookie
void setPath(String uri)

 

  ②多个服务器间共享

//Cookie
void setDomain(String pattern)
String getDomain()

  如果设置domain的一级域名相同,则多个服务器间可以共享cookie

 

 

(5)特点

  cookie存储在浏览器端

  浏览器对单个cookie大小、同一个域名下的cookie数目有限制

  

  cookie用来存储少量不太敏感的信息;  在不登录的情况下,实现服务器对客户端的身份识别

 

 

 

3. HttpSession

  会话期间存在,直到浏览器关闭或一定的时间后浏览器没有发出请求后session会被清除

  获取:

//HttpServletRequest
HttpSession getSession()
HttpSession getSession(boolean create)

  使用:

//HttpSession
void setAttribute(String name,Object value)
void removeAttribute(String name)
Object getAttribute(String name)

  销毁:

void invalidate()

  生命周期相关:

long getLastAccessedTime()  客户端最后一次与会话关联的请求时间
int getMaxInactiveInterval()  一个会话内两个请求的最大时间间隔,单位秒
void setMaxInactiveInterval(int s) 

 

  

  Session基于Cookie(Cookie从服务器响应给客户端,在客户端再次请求时将此Cookie直接发送给服务器),而Session内容保存在服务器,通过Cookie将Session的ID响应给Cookie,浏览器再次请求时带着这个ID。

 

(1)浏览器关闭后,再次访问,还希望能获得之前相同的session?

  默认,浏览器关闭后再次访问获得的session不是同一个。

  由于session在浏览器关闭后在服务物器里还会存在一段时间,可通过手动保存session的ID到Cookie,响应到客户端,浏览器关闭后再次访问可通过此Cookie获取相同的Session

Cookie cookie = new Cookie("JSESSIONID",session.getID());
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);

 

(2)客户端没有关闭,而服务器重启

  服务器重启后,session销毁了,客户端再次访问,不能获得同一个session

  解决:

    session钝化:在服务器正常关闭前,将session对象序列化到硬盘

    session活化:session序列化文件恢复(session对象的内存地址一般是不同的,但sessionID不变)

(3)session销毁时间

  ①服务器关闭

  ②session对象调用 invalidate()

  ③浏览器超过一定时间没有发起请求

    tomcat服务器 web.xml 配置文件里面有<session-config>,配置了session的默认存活时间

 

(4)特点

  ①用于一次会话里多次请求间共享数据,数据保存在服务器

  ②session可存储任意类型、任意大小的数据

  ③session相对cookie更安全

 

posted @ 2020-05-22 23:00  T,X  阅读(128)  评论(0)    收藏  举报