简单的session和cookie,一句话概括“浏览器和服务器的会话技术”

cookie

        1、代码演示

                              1、发送cookie

        Cookie cookie = new Cookie("msg","你好");
        resp.addCookie(cookie);

                             2、接收cookie

        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            String name = cookie.getName();
            String value = cookie.getValue();
            System.out.println("name " + name + " ,value :" + value);
        }

       2、原理

                         1、发送cookie时,其实是在响应头中添加一个set-cookie的键值对,msg=你好,此时后台如果查询有set-cookie为key的响应头,那么就会将这个数据保存到客户端浏览器中

                                    

                       2、获取cookie时,会查询cookie头中的数据                

                     

            3、细节

                        1、如何传入多个cookie

        Cookie cookie = new Cookie("msg","你好");
        resp.addCookie(cookie);
        Cookie cookie2 = new Cookie("msg2","你好");
        resp.addCookie(cookie2);

                        2、在浏览器储存多长时间

                            1、默认情况下,关闭浏览器就会删除

                            2、持久化存储  setMaxAge(agg);  

                                  1、正数:将cookie存储到硬文件中,到达时间后自动清除硬盘文件中,单位是秒

                                  2、负数:关闭浏览器就会删除

                                  3、0:删除cookie

                         3、能否存中文

                                   tomcat8之前不能存储中文 ,tomcat8之后是可以存储中文

                        4、获取的范围有多大

                                 1、默认情况是当前目录下

                                 2、可以修改 setPath("/") 就可以让整个目录都可以获取到

                                 3、可以修改cookie.setDomain(".baidu.com"); 设置二级域名 都可以获取到该cookie

            4、特点

                      1、在浏览器上存放,不安全

                      2、有大小限制,4kb左右

                      3、用户存储少量对安全不敏感的数据,例如百度中设置等数据

session

         1、代码演示

                1、发送session

       HttpSession session = req.getSession();
        session.setAttribute("msg","aaa");

               2、获取session

        HttpSession session = req.getSession();
        System.out.println(session.getAttribute("msg"));

        2、原理

                     发送时会在cookie头中创建一个JSESSIONID的key,value为session的id,getSession会根据这个JSESSIONID来获取值

                 

       3、细节

                  1、当浏览器关闭后,服务器不关闭,session是否为同一个

                            默认情况下不是,由于不是同一个sessionid,所以会导致获取不到值

                            可以new Cookie(),传入key为JSESSIONID,value为session的id,setAge(60)就可以持久化存储

                  2、浏览器不关闭,服务器关闭,session是否为同一个

                          不是同一个,但是为了保证可以为同一个,tomcat对session进行了优化,自动的,不需要我们手动设置,但是由于idea的tomcat每次启动是将work目录先删除,所以测试不出来

                           session钝化:session会在tomcat正常关闭之前,将session序列化到文件上

                           session活化:session会在tomcat正常启动之后,将session文件读取为对象    

                          项目启动时可以看到idea中的tomcat信息,找到这个目录,就可以找到信息

                          

                               

                   3、session什么时候被销毁

                         调用session.invalidate();可以销毁session

                         session默认失效时间是30分钟,可以在web.xml中修改

                         

                 4、session是存在服务器端的

                 5、session是可以存储任意类型,任意大小的数据

       4、session和cookie的区别

                  1、session存储于服务器端,cookie存储于客户端

                  2、session没有存储大小限制,cookie有

                  3、session安全,cookie不安全

                  4、cookie可展示一些时间等对安全不敏感的数据,session可存储验证码对安全敏感的数据

                        

                       

猜你喜欢

转载自blog.csdn.net/qq_38384460/article/details/113661821