创建cookie和session

创建cookie

//创建cookie
 @RequestMapping(path = "/cookie/set", method = RequestMethod.GET)
    @ResponseBody
    public String setCookie(HttpServletResponse response) {
        // 创建cookie
        Cookie cookie = new Cookie("code", CommunityUtil.generateUUID());
        // 设置cookie生效的范围 哪些请求会发cookie
        cookie.setPath("/cookie");
        // 设置cookie的生存时间 单位s,设置后会将cookie存入硬盘中
        cookie.setMaxAge(60 * 10);
        // 发送cookie
        response.addCookie(cookie);
        return "set cookie";

//获取cookie
 @RequestMapping(path = "/cookie/get", method = RequestMethod.GET)
    @ResponseBody//从cookie数组中寻找Key为code的cookie
    public String getCookie(@CookieValue("code") String code) {
        System.out.println(code);
        return "get cookie";
    }
    }

创建session

cookie放在客户端不安全,我们可以使用session来记录客户端行为,session也还是要依赖cookie的:当客户端访问服务器,服务器会生成一个cookie发给客户端,客户端下次带着cookie访问时,服务器就能找到对应的session

//创建session
    @RequestMapping(path = "/session/set", method = RequestMethod.GET)
    @ResponseBody  //session对象的类型是httpSession
    public String setSession(HttpSession session) {
        session.setAttribute("id", 1);
        session.setAttribute("name", "Test");
        return "set session";
    }
//获取session
    @RequestMapping(path = "/session/get", method = RequestMethod.GET)
    @ResponseBody
    public String getSession(HttpSession session) {
        System.out.println(session.getAttribute("id"));
        System.out.println(session.getAttribute("name"));
        return "get session";
    }

服务器分布式部署的时候session会有一些问题:
nginx在分配请求的时候,前后两次可能会发给不同的服务器,导致产生的session不同
解决方案:
1 粘性处理:让同一个ip的请求发送给同一个服务器(会加大这个服务器压力,不能保证负载均衡)
2同步session:如果一个服务器创建了session就把session同步到其他所有服务器(占用服务器的空间,服务器之间有耦合)
3共享session:一个服务器单独存放session,其他服务器向这个服务器获取session(如果这个服务器挂了,影响太大)
4尽量用cookie,如果数据敏感 那就放入数据库(redis)中(常用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值