cookie和session在页面和后端的详解

今天小熙需要用到session,突然想起来cookie,但是有点模糊。所以写下这篇回顾。
一个人的叙述是有限的难免偏颇,所以本文会采用大量链接。(注:本篇主要是回顾实际用法)

1.cookie和session的详解

对于cookie的链接请求和session的会话技术,小熙找到了一篇非常详细的说明:cookie和session详解

2.后端实际代码

1. 代码如下:

    /**
     * 回顾Cookies和session用法
     * 从HttpServlet中获取和响应
     * @param httpCookie   在参数中构建cookie
     * @param httpServletResponse
     * @param httpServletRequest
     */
    public void ceshiCookies(HttpCookie httpCookie, HttpServletResponse httpServletResponse, HttpServletRequest httpServletRequest, HttpSession httpSession){
        // 从请求中获取cookies
        Cookie[] cookies = httpServletRequest.getCookies();

        // 遍历前台获取的Cookies
        for (Cookie cookie:cookies
             ) {
            if(cookie.getName().equals("姓名")){
                // 修改cookie
                cookie.setValue("修改");
                // 将修改后的cookie响应回前台
                httpServletResponse.addCookie(cookie);
                // 销毁cookie
                cookie.setMaxAge(0);
            }
        }

        // =====================================================================================

        // 由参数构建,不建议使用
        httpCookie.setValue("");
        httpCookie.getValue();

        // =====================================================================================
        // 获取session的id
        String JSESSIONID = httpSession.getId();

        // 后端自定义cookies
        // key 和 value 都只能是String类型的,注意后端sessionId响应给前端的key就是JSESSIONID
        Cookie cookie = new Cookie("JSESSIONID",JSESSIONID);

        // 通过session的上下文对象根据sessionId获取session,但是由于java说安全性问题,所以不推荐使用。
        // 建议使用session监听器配合一个静态的hashMap即可实现
        HttpSession session = httpSession.getSessionContext().getSession(JSESSIONID);

        // 销毁session
        session.invalidate();

        // 设置存活时间
        cookie.setMaxAge(60);
        // 设置存储路径
        cookie.setPath("/");


		// 后端设置Cookie前端跨域获取丢失问题(基于springboot实现)
        // 1.跨域问题说明:后端域名为A.abc.com,前端域名为B.abc.com。
        // 2.后端设置一个cookie发送给前台,domain应该是setDomain(“abc.com”),而不是setDomain(“B.abc.com”)
        // 3.另外,还要实现WebMvcConfigurerr配置加入Cors的跨域,在尾部会附上
        cookie.setDomain("abc.com");

        // 将自己后端定义的cookies响应给前端
        httpServletResponse.addCookie(cookie);
    }



//    WebMvcConfigurerr配置加入Cors的跨域
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "OPTIONS", "PUT")
                    .allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method",
                            "Access-Control-Request-Headers")
                    .exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials")
                    .allowCredentials(true).maxAge(3600);
        }

    }

  1. 关于sessionId的简单说明:jsessionid的简单说明
  2. 关于使用session监听器配合一个静态的hashMap实现:新的方法
  3. springcloud Zuul丢失Cookie的解决方案:springCloud丢失cookie
  4. 前端跨域解决:cookie的前端跨域

3. 前端代码

由于小熙是个后端工程师,不献丑了就直接附上链接吧,哈哈哈。

  1. js和jQuery操作cookie
  2. Vue操作cookie

本次小熙的分享到此结束了,如有误解还望指出。(本文仅供学习交流,如有转载请注明出处)

猜你喜欢

转载自blog.csdn.net/weixin_41133233/article/details/83789566
今日推荐