忘的差不多了这次记录下来
会话技术Cookie&Session
举个例子,什么是会话技术,connection 连接数据库就是一次会话。
首先会保证连接正常,然后运行完sql关闭,就算是一次会话。
Session就是在服务器中开辟一块内存给客户保存数据
假如服务器没地方给你使用,单独给你开空间了,那就只能让你本地记住,那就是cookies
举例个小故事
找王五借钱,然后王五用小本本记下来是session
找王五借钱,找王五借钱的人太多了记不完让你自己记住,就是cookies
会话技术
从打开浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据
的。
会话技术分为Cookie和Session
Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清楚cookie
Session:将数据存储到服务器端,安区性相对好,增加服务器压力
下面我们在springboot搞一搞cookie
首先先获取一下request 和 response 有三种方法 这就不说了
直接代码
@Autowired
private HttpServletRequest request;
@Autowired
private HttpServletResponse response;
@GetMapping(value="setcookie")
@ApiOperation(value = "sola最吊cookie设置")
public Map<String, Object> setCookie(String username,String password){
Map<String, Object> map = new HashMap<>();
boolean status = true;
Cookie ucook =new Cookie("solaxinxi", username+","+password);
response.addCookie(ucook);
map.put("status", status);
return map;
}
然后运行报错An invalid character [44] was present in the Cookie value
原因是因为username+","+password的逗号 改为#号即可
我这里拿的zuul调用 直接调用接口不管用,要去zuul配置文件加入
solatest:
path: /solatest/**
service-id: SOLATEST
sensitive-headers:
无视敏感头携带cookies才可以,看到了cookie内容
这样虽然设置好了cookie ,但是建立好的cookie 默认 关闭浏览器就消失了(默认是会话级别的),所以我们可以给他加一个持久化时间
Cookie ucook =new Cookie("solaxinxi", username+"#"+password);
//设置最大存在时间 秒
ucook.setMaxAge(60*60*24*7);
response.addCookie(ucook);
快速设置所有服务敏感头
spring:
application:
name: ZUUL
server:
port: 30600
zuul:
sensitive-headers:
routes:
postman:
path: /postman/**
service-id: POSTMAN
systemmgr:
path: /mgr/**
service-id: SYSTEMMGR
我们看到cookie属性里还有一个携带路径
默认设置的是只有子模块solatest下sola路径才能携带cookie过去 ,我们可以设置一下
Cookie ucook =new Cookie("solaxinxi", username+"#"+password);
//设置最大存在时间 秒
ucook.setMaxAge(60*60*24*7);
//设置携带路径
ucook.setPath("/");
response.addCookie(ucook);
这样就设置成了所有的子项目 都可以携带cookie 过去
这样访问postman的接口也可以携带cookie
删除cookie很简单
保证key一样,路径一样,然后把时间改成0就可以
------------------------------------------------------------------------------------------------------------------------
获取cookie
@GetMapping(value="getcookie")
@ApiOperation(value = "sola最吊获取cookie")
public Map<String, Object> getCookie(){
Map<String, Object> map = new HashMap<>();
Cookie[] cookies = request.getCookies();
if(cookies != null){
String cookstr = "";
for(Cookie k : cookies){
cookstr += k.getName()+"#"+k.getValue();
}
map.put("data", cookstr);
}
return map;
}