java的cookie与session底层实现原理分析 - Go语言中文社区

java的cookie与session底层实现原理分析


一、cookie理解

1.特点

Cookie技术:会话数据保存在浏览器客户端。

2.Cookie技术核心,Cookie类:用于存储会话数据

2.1.构造Cookie对象

new Cookie(java.lang.String name, java.lang.String value)

2.2.设置cookie

void setPath(java.lang.String uri)   :设置cookie的有效访问路径

void setMaxAge(int expiry) : 设置cookie的有效时间

void setValue(java.lang.String newValue) :设置cookie的值

2.3.发送cookie到浏览器端保存

void response.addCookie(Cookie cookie)  : 发送cookie

2.4.服务器接收cookie

Cookie[] request.getCookies()  : 接收cookie

3.Cookie原理(cookie不能跨浏览器查询)

3.1.服务器创建cookie对象,把会话数据存储到cookie对象中。

new Cookie("name","value");

3.2. 服务器发送cookie信息到浏览器

response.addCookie(cookie);

3.3.浏览器得到服务器发送的cookie,然后保存在浏览器端。

3.4.浏览器在下次访问服务器时,会带着cookie信息

3.5.服务器接收到浏览器带来的cookie信息

request.getCookies();

二、代码例子

1.项目结构

2.添加cookie代码

/**
 * Created by ChenMingXu on 2019/5/28.
 */
//添加cookie
@WebServlet("/AddCookieServlet")
public class AddCookieServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("xingming", "chenmingxu");
        //为什么这么写,因为在服务器端写好,返回客户端
        resp.addCookie(cookie);
        System.out.println("添加cookie");
    }
}

3.测试结果

4.获取cookie的代码

/**
 * Created by ChenMingXu on 2019/5/28.
 */
@WebServlet("/GetCookieServlet")
public class GetCookieServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie:cookies){
            System.out.println(cookie.getName()+"....."+cookie.getValue());
        }
    }
}

5.测试获取cookie的结果

6.后台打印结果

三、session理解

1.session技术核心,HttpSession类:用于保存会话数据

1.1.创建或得到session对象

HttpSession getSession()  

HttpSession getSession(boolean create)  

1.2.设置session对象

void setMaxInactiveInterval(int interval)  : 设置session的有效时间

void invalidate()     : 销毁session对象

java.lang.String getId()  : 得到session编号

1.3.保存会话数据到session对象

void setAttribute(java.lang.String name, java.lang.Object value)  : 保存数据

java.lang.Object getAttribute(java.lang.String name)  : 获取数据

void removeAttribute(java.lang.String name) : 清除数据

2.session原理

2.1.原理图解

3.添加session代码

/**
 * Created by ChenMingXu on 2019/5/28.
 */
@WebServlet("/AddSessionServlet")
public class AddSessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 默认不传为true,没有sessionid 我会创建session 否则
        HttpSession httpSession = req.getSession(true);
        httpSession.setAttribute("userName", "chenmingxu");
        System.out.println("添加session成功。。。。。");
    }
}

4.测试添加session的结果


5.获取session代码

/**
 * Created by ChenMingXu on 2019/5/28.
 */
@WebServlet("/GetSessionServlet")
public class GetSessionServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession(false);
        String userName = (String)session.getAttribute("userName");
        System.out.println("userName"+userName);
    }
}

6.测试获取session的结果

7.后台打印结果

四、总结

1.cookie是保存在客户端的,session是保存在服务器端的,但是sessionid是保存在客户端的,底层调用还是cookie把sessionid返回到客户端的。

2.cookie是保存在客户端的,session是保存在服务器端的,如果session重启的时候,数据就会丢失,这时候你该怎么办,放进redis中。

五、结束

Always keep the faith!!!

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/chenmingxu438521/article/details/90637617
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 13:52:07
  • 阅读 ( 1115 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢