Java-很深我只知其一-Session与Cookie存值、取值

Java-很深我只知其一-Session与Cookie存值、取值

 

  • cookie机制和session机制的区别

    具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
    同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,
    但实际上还有其他选择,比如说重写 URL和隐藏表单域。

 

  • Session存值、取值

  • session是tomcat中request获取的对象,存活于服务器(超出有效时间也会失效)
@ApiOperation(value = "setSession", notes = "[setSession]")
    @GetMapping(value = "/setSession")
    public String setSession(
            HttpServletRequest request,
            HttpServletResponse response,
            @ApiParam(required = true, name = "sessionValue", value = "sessionValue") @RequestParam(name = "sessionValue", required = true) String sessionValue
    ) throws Exception {

        HttpSession session = request.getSession();
        String sessionId = session.getId();
        session.setMaxInactiveInterval( 3600  );//设置过期时间
        request.getSession().setAttribute( session.getId(),sessionValue );
        return sessionId;
    }

    @ApiOperation(value = "getSession", notes = "[返回Session Value]")
    @GetMapping(value = "/getSession")
    public String getSession(
            HttpServletRequest request,
            HttpServletResponse response,
            @ApiParam(required = true, name = "sessionId", value = "sessionId") @RequestParam(name = "sessionId", required = true) String sessionId
    ) throws Exception {

        HttpSession session = request.getSession();
        return (String) session.getAttribute( sessionId );
    }
  • Cookie存值、取值、使用细节

  • cookie存活于浏览器,可以利用是tomcat中response对象传值,利用浏览器做载体传值,浏览器关闭即消失(超出有效时间也会失效)

 

  • 会话cookie和持久cookie的区别
    如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
    这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。


    如果设置了过期时间(setMaxAge(60*60*24)),浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
    存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。(在IE下测试通过)

  • 用户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
    发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个Set-Cookie HTTP请求报头中。
    由于这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头,因此我们将这个方法称为是addCookie,而非 setCookie。
    同样要记住响应报头必须在任何文档内容发送到客户端之前设置。
     

@ApiOperation(value = "setCookie", notes = "setCookie")
    @GetMapping(value = "/setCookie")
    public String setCookie(
            HttpServletRequest request,
            HttpServletResponse response,
            @ApiParam(required = true, name = "cookieValue", value = "cookieValue") @RequestParam(name = "cookieValue", required = true) String cookieValue
    ) throws Exception {

        Cookie cookies = new Cookie( "test",cookieValue );
        cookies.setPath("/");//tomcat下多应用共享
        cookies.setMaxAge( 1000*60*24 );//设置过期时间
        response.addCookie( cookies );
        return cookies.toString();
    }



    @ApiOperation(value = "getCookie", notes = "getCookie")
    @GetMapping(value = "/getCookie")
    public String getCookie(
            HttpServletRequest request,
            HttpServletResponse response
    ) throws Exception {

        Map<String,String> cookieMap = new HashMap<String,String>();
        Cookie[] cookies = request.getCookies();
        if (cookies!=null){
            for (Cookie cookie : cookies) {
                cookieMap.put( cookie.getName(),cookie.getValue());
            }
        }
        return cookieMap.toString();
    }

 

chenyb 随笔记录,只为方便自己学习

2020-4-30

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值