Java-很深我只知其一-Session与Cookie存值、取值
-
cookie机制和session机制的区别
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,
但实际上还有其他选择,比如说重写 URL和隐藏表单域。
-
Session存值、取值
- session是tomcat中request获取的对象,存活于服务器(超出有效时间也会失效)
@ApiOperation(value = "setSession", notes = "[setSession]")
@GetMapping(value = "/setSession")
public String setSession(
HttpServletRequest request,
HttpServletResponse response,
@ApiParam(required = true, name = "sessionValue", value = "sessionValue") @RequestParam(name = "sessionValue", required = true) String sessionValue
) throws Exception {
HttpSession session = request.getSession();
String sessionId = session.getId();
session.setMaxInactiveInterval( 3600 );//设置过期时间
request.getSession().setAttribute( session.getId(),sessionValue );
return sessionId;
}
@ApiOperation(value = "getSession", notes = "[返回Session Value]")
@GetMapping(value = "/getSession")
public String getSession(
HttpServletRequest request,
HttpServletResponse response,
@ApiParam(required = true, name = "sessionId", value = "sessionId") @RequestParam(name = "sessionId", required = true) String sessionId
) throws Exception {
HttpSession session = request.getSession();
return (String) session.getAttribute( sessionId );
}
-
Cookie存值、取值、使用细节
- cookie存活于浏览器,可以利用是tomcat中response对象传值,利用浏览器做载体传值,浏览器关闭即消失(超出有效时间也会失效)
-
会话cookie和持久cookie的区别
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间(setMaxAge(60*60*24)),浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。(在IE下测试通过) -
用户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个Set-Cookie HTTP请求报头中。
由于这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头,因此我们将这个方法称为是addCookie,而非 setCookie。
同样要记住响应报头必须在任何文档内容发送到客户端之前设置。
@ApiOperation(value = "setCookie", notes = "setCookie")
@GetMapping(value = "/setCookie")
public String setCookie(
HttpServletRequest request,
HttpServletResponse response,
@ApiParam(required = true, name = "cookieValue", value = "cookieValue") @RequestParam(name = "cookieValue", required = true) String cookieValue
) throws Exception {
Cookie cookies = new Cookie( "test",cookieValue );
cookies.setPath("/");//tomcat下多应用共享
cookies.setMaxAge( 1000*60*24 );//设置过期时间
response.addCookie( cookies );
return cookies.toString();
}
@ApiOperation(value = "getCookie", notes = "getCookie")
@GetMapping(value = "/getCookie")
public String getCookie(
HttpServletRequest request,
HttpServletResponse response
) throws Exception {
Map<String,String> cookieMap = new HashMap<String,String>();
Cookie[] cookies = request.getCookies();
if (cookies!=null){
for (Cookie cookie : cookies) {
cookieMap.put( cookie.getName(),cookie.getValue());
}
}
return cookieMap.toString();
}
chenyb 随笔记录,只为方便自己学习
2020-4-30