HTTP 的基本性质 : 简单的, 可扩展的, 无状态的有会话的;
无状态: 在同一个链接(同一个浏览器访问同一个服务器) 链接上之后可以发送多次请求,多次请求之间没有任何关系; 请求之间没有联系;这带来一个问题,即用户没有办法在同一个网站中进行连续的交互。
用cookies 解决这个问题: 用cookies 创建有状态的会话 ;cookies 是使用HTTP 的头部扩展,加入头部之后创建一个会话让每次请求都能共享相同的上下文信息。达成相同的状态;
cookies:是服务器发送到用户浏览器饼保存在本地的一小块数据,他会在浏览器下次向同一服务器再次发送请求时被携带并发送到服务器;
cookie 示例:
@
@ RequestMapping (path="/cookie/set",method=RequestMethod.GET)
@ ResposseBody
public String setCookie (HttpServletResponse response){
//创建cookie
Cookie cookie =new Cookie("name"," value");
//设置cookie 生效范围
cookie.setPath("/");
//设置cookie 生存时间
//一分钟60 * 10
cookie.setMaxAge(60*10)
//发送cookie}
//把cookie放到response 头部
response.addCookie(cookie);
return "set cookie";}
测试
需要依赖浏览器的插件
在转到地址前打开检查。network - 发送请求时可以看到请求过程: set 请求 点击 -
因为是服务器发给浏览器放在response 的头部 所以看response
set-cookie
浏览器访问服务器的时候会接着带这个cookie
@ CookieValue ("code")String code //意思为从cookie 中取key 为code
public String getCookie (@ CookieValue("code")String code){
code//
return "get cookie";}
缺点: 存在客户端的数据导致它很不安全
对性能产生印象
另外一种方法是: Session是java EE 用于在服务端记录客户信息 但是会对服务端内存产生压力
浏览器向服务器发送请求-服务器创建session对象- 浏览器和服务器的对应关系通过cookie
每次创建一个唯一标识(sessionid) 通过cookie 传给浏览器
浏览器存储- 下次浏览器发送的时候就是之前的sessionid
服务器就可以找到之前与浏览器对应的session
示例:session 对象可以直接注入
@ RequestMapping (path="/session/set",method=RequestMethod.GET)
@ ResposseBody
public String setsession (HttpSession session){
session.setAttribute("id",1);
return "set session ";
}
//取值
@ RequestMapping (path="/session/get",method=RequestMethod.GET)
@ ResposseBody
public String setsession (HttpSession session){
System.out.println(session.getAttribute("id"))
return "get session ";
}



