重学session

前述所说,session就是在服务器开辟一块内存记录下来你的内容,然后他又是怎么找到的呢,是通过sessionID,每一个session都有唯一的id。

 

流程就是服务创建了一个session,然后服务器把session的id返回给客户端,然后客户端可以通过这个id去访问其他页面服务。

 

session技术是基于cookie--------cookie技术

存储session编号--------JSESSIONID

我们来小敲一下代码

@GetMapping(value="setsession")
	@ApiOperation(value = "sola最吊设置session")
	public Map<String, Object> setSession(String key , String username,String value){
		Map<String, Object> map = new HashMap<>();
		//创建该客户端(会话)的私有的session区域
        		//request.getSession();方法内部会判断,该客户端是否已在服务端已有session,存在不创建

		HttpSession session = request.getSession();
		
		//获取该session区域的唯一id
		String id = session.getId();
		
		session.setAttribute(key, username + "#" + value);

		map.put("id", id);
		
		return map;
	}

这就创建了一个session区域并设置了一个值 然后我们去看下cookie

 如刚才所说session是基于cookie技术,cookie 来 记录服务器存储的id。

//request.getSession();方法内部会判断,该客户端是否已在服务端已有session,存在不创建,原理就是去读取cookie 看看有没有一个叫JSESSIONID的cookie,如果有就不创建新区域,没有就创建新区域

假如你清除了cookies那么也就没有的名为JSESSIONID的cookie,那么request.getSession();相当于没有拿到客户端的id,就会创建一个新的区域给你,但是之前的区域还存在但是已经无法找到了

---------------------------------------------------------------------------------------------------------------------------------------

上面搞定了设置值

下面来搞定获取值

	@GetMapping(value="getSession")
	@ApiOperation(value = "sola最吊获取session")
	public Map<String, Object> getSession(String key){
		Map<String, Object> map = new HashMap<>();

		HttpSession session = request.getSession();
		
		Object attribute = session.getAttribute(key);
		
		System.err.println(attribute);
		
		//删除值
		//session.removeAttribute(key);
		map.put("names", attribute);
		
		return map;
	}
	

获取值很简单

——————————————————————————————————————————————————————

Session对象的生命周期

创建:第一次执行request.getsession的时候创建session

销毁:(1)服务器关闭时

            (2)Session过期/失效,默认(30分钟)       从不操作服务器资源时开始计时

            (3)手动销毁Session(session.invalidate)

——————————————————————————————————————————————————————

创建session用的cookie默认是会话级别的,也就是说关闭服务器就没有该cookie了,虽然session默认是30分钟失效,但是关闭了网页再打开去访问也找不到原来的session。

然而解决的方法挺二的

@GetMapping(value="setsession")
	@ApiOperation(value = "sola最吊设置session")
	public Map<String, Object> setSession(String key , String username,String value){
		Map<String, Object> map = new HashMap<>();
		//创建该客户端(会话)的私有的session区域
		//request.getSession();方法内部会判断,该客户端是否已在服务端已有session,存在不创建
		HttpSession session = request.getSession();
		
		//获取该session区域的唯一id
		String id = session.getId();
		
		session.setAttribute(key, username + "#" + value);

		Cookie cookie = new Cookie("JSESSIONID", id);
		
		cookie.setPath("/");
		
		cookie.setMaxAge(60*30);
		
		response.addCookie(cookie);
		
		return map;
	}

自己去设置一个JSESSION的Cookie并设置路径时间。。。。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

zuul共享session

默认设置假设sola子服务设置了一个session 然后去mgr子模块去取session mgr默认会丢掉原id从新建立一个新的id(重新给Cookie里的JSESSIONID赋值一个新的id一个新的模块)

然后我们再zuul配置文件配置一下

spring:
  application:
    name: ZUUL
server:
  port: 30600
zuul:
  sensitive-headers: "*"  //这是重点貌似就可以了
  routes:
    postman: 
      path: /postman/**
      service-id: POSTMAN  
    systemmgr:
      path: /mgr/**
      service-id: SYSTEMMGR 
    code:
      path: /code/**
      service-id: CODE 
    post:
      path: /post/**
      service-id: POST 
    resource:
      path: /resource/**
      service-id: RESOURCE 
    intergration:
      path: /intergration/**
      service-id: INTERGRATION 
    roadwork:
      path: /roadwork/**
      service-id: ROADWORK 
    solatest:
      path: /solatest/**
      service-id: SOLATEST 

上述还是不行嗯。。。。。。。。。。。。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值