重学cookies

忘的差不多了这次记录下来

会话技术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;
	}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值