6、Cookie和Seesion
-
httpt是无状态的,不能保存每次提交的信息
-
如果用户发来一个新的请求,服务器无法知道它是否与上次的请求有联系。
-
对于那些需要多次提交数据才能完成的web操作,比如登录,就成问题了
2、概念
将多次交互涉及的数据(即状态)保存下来。
3、状态管理
-
客户端状态管理技术:cookie
-
服务端状态管理技术:session
4、Cookie
几个重要的方法
-
创建cookie,一般都是从服务器到客户端进行设置cookie,同时可以设置cookie针对的服务路径
//创建一个cookie对象,并给该cookie赋名赋值 Cookie cookie = new Cookie("username","Lin");//设置要服务的controller对象 cookie.setPath("/getcookie"); //设置cookie的存活时间,单位秒 cookie.setMaxAge(60);//通过respone添加cookie, //在发送请求,响应后会传送cookie值,即该controller会有cookie,指定路径的controller也会有 response.addCookie(cookie);
//通过request获取cookie
Cookie[] cookies = request.getCookies();
//获取cookie名
cookie.getName()
//获取cookie值
cookie.getValue()
- 总体实例
@RequestMapping("/setcookie")
public String setCookie(HttpServletRequest request, HttpServletResponse response){
Cookie cookie = new Cookie("username","Lin");
cookie.setPath("/getcookie");
cookie.setMaxAge(60);
response.addCookie(cookie);
return "set cookie";
}
@RequestMapping("/getcookie")
public String getCookie(HttpServletRequest request, HttpServletResponse response){
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for (Cookie cookie : cookies) {
System.out.println("获取到的cookie值是:"+cookie.getName()+" = "+cookie.getValue());
}
}
return "get cookie";
}
同一个会话能公用一个session
-
原理
服务器会为每次会话分配一个session对象
同一个浏览器发起的多次请求,都属于一次会话(session)
首次使用session时,服务器会自动创建session,并创建cookie存储sessionID发送回客户端
关闭浏览器会失效
-
几个重要方法
//创建session
request.getSession().setAttribute("name","Lin");
//获取session
String name = (String) request.getSession().getAttribute("name");
//消灭session
request.getSession().removeAttribute("name");
- 实例
@RequestMapping("/setsession")
public String setSsion(HttpServletRequest request,HttpServletResponse response){
request.getSession().setAttribute("name","Lin");
return "setSesion";
}
@RequestMapping("/getsession")
public String getssion(HttpServletRequest request,HttpServletResponse response){
String name = (String) request.getSession().getAttribute("name");
System.out.println("session:"+name);
request.getSession().removeAttribute("name");
return "getsesion";
}
-
开始:第一次使用seesion的请求产生,则创建seesion
结束:
浏览器关闭,则关闭
session超时,则失效:request.getSession().setMaxInactiveInterval(10); 单位秒
手工销毁,则失效:request.getSession().invalidate();
-
还有一个问题是浏览器关闭cookie后的处理,只做了解
-
request只对一次请求、session对一次会话、servletcontext对整个应用全局

浙公网安备 33010602011771号