Cookie和Session

哑火容器
• 阅读 213

Cookie:把会话数据保存到客户端的技术,浏览器自身具备存储Cookie数据的能力,同时具有自动携带数据的能力
  Session:把会话数据保存到服务端的技术,使用散列的结构存储数据 依赖cookie
  cookie和session:都是用来存储会话数据的
            区别:cookie把数据保存在客户端,session是把数据保存在服务端
                  cookie不便于保存大量数据,因为网络压力大。而session可以保存大量的数据,但是服务器压力大
                  cookie技术不安全,可能会篡改数据,而session比较安全。
                  session技术依赖于cookie技术。         
Cookie:   存在于:响应头set-Cookie  请求头:Cookie   通过请求request获取 注意cookie不支持中文
    0 工作流程:
        浏览器访问服务器,服务器创建键值对的形式(cookie),
        通过响应(响应头 set-cookie)返回给浏览器,
        cookie保存在浏览器上,在下次访问的服务器时候,
        根据 一定的规则 携带不同的cookie,不是所有的都会携带,
        规则:当访问的url包含此cookie的path的时候,就会携带这个cookie;反之不会。
        通过请求(请求头 cookie)携带,服务器就可以拿到这些cookie。
    1 创建Cookie数据,发送到客户端,可以有多个cookie发送到客户端保存

[Java] 纯文本查看 复制代码

?

1

2

new Cookie(String name,String value)    //创建

response.addCookie(cookie) //把cookie数据加入到响应头中,发送给浏览器 放在响应头中Set-Cookie:username=zhangsan

    2 获取cookie:    //不能获取指定的cookie 只能通过获取所有的cookie数据然后

[Java] 纯文本查看 复制代码

?

1

2

3

Cookie[]  request.getCookies() //通过request获取所有的cookie数据,返回Cookie对象的数组

getName()  //遍历根据Cookie对象获取name

getValue() //遍历根据Cookie对象获取value

    3 设置cookie有效期:不清除缓存的情况下,cookie数据默认保存在浏览器内存中,默认当浏览器关闭后cookie数据清除,
                        跟服务器是否正常关闭无关,数据存储在浏览器
                        如果设置了cookie的有效期,那么跟是否关闭浏览器无关
            手动设置cookie有效期:cookie.setMaxAge(int 秒):设置Cookie的有效期是秒。
                                  默认设置为负值,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效
                                  0秒就是删除该cookie(前提,必须路径相同),杀死cookie
                              

[Java] 纯文本查看 复制代码

?

1

2

3

4

cookie = new Cookie("要删除的cookie的名称", "")

 cookie.setPath("要删除cookie的路径")

 cookie.setMaxAge(0)

 response.addCookie(cookie)

            原理:浏览器接收到cookie后,会把数据持久的保存到磁盘上second秒,过期之前始终有效,无论浏览器是否关闭
            a.相同键名的Cookie(值可以相同或不同)可以存在于不同的路径下。
            b.删除时,如果当前路径下没有键为"key"的Cookie,则查询全部父路径,检索到就执行删除操作(每次只能删除一个与自己最近的父路径Cookie)
            c.读取Cookie时只能读取直接父路径的Cookie。如果当前路径为/test/test2,要读取的键为"key"。当前路径读取后,还要读取/test,/test读取后,还要读取/
            d.在做Java的web项目时,由于一般的Web服务器(如Tomcat或Jetty)都用Context来管理不同的WebApplication,这样对于每个Context有不同的Path,
                在一个Server中有多个WebApplication时要特别小心,不要设置Path为/的Cookie,容易误操作。(当然前提是域名相同)
    4 Cookie路径的设置:从项目名到资源名前.当访问的url包含此cookie的path的时候,就会携带这个cookie;反之不会
                        同一路径下不能有重名Cookie,有的话后边覆盖前面。不同路径下可以有重名Cookie。默认的cookie路径是在根目录下/day12
                        setPath(“路径”):cookie的路径被包含
        cookie默认存储路径为:访问Servlet的路径的父路径 最后一级为资源名
        一个路径不存在重名的cookie,不同路径下可以有重名的cookie。
                  

[Java] 纯文本查看 复制代码

?

1

2

3

4

5

6

cookie:

  url:  /webtest/aa/bb/cc                                          

 当我们访问 http://ip:端口/webtest/aa/bb/cc路径或这个路径的子路径时都会携带当前cookie

 子路径:

     http://localhost/webtest/aa/b...

     http://localhost/webtest/aa/b...

                    
    5 注意Cookie不能跨浏览器,不支持中文,如果想要想存储,先把中文用utf-8 编码存储乱码,再解码
            response中多条set-Cookie设置
Session:服务器端的会话技术,底层依赖Cookie 把JseesionId写回浏览器,浏览器关闭后Session也不能使用;通过请求request获取
         一次会话中仅存在一个session。只要这次会话存在session一直有效
        

[Java] 纯文本查看 复制代码

?

1

2

3

4

JSESSIONID : 

           httpOnly    true

           path    /webtest 

           value    AD063751712C047BD98C8560BF3988B6

        0 工作流程:      
                浏览器向服务器发送请求,服务器判断浏览器是否携带了唯一标识
              若有唯一标识:
                   服务器会拿着唯一标识去session池中查询是否有对应的标识
                    若有:直接操作session对象,并把它存放到浏览器端
                    若无:服务器会为其创建一个私有的内存空间,可以操作session,把标识存放到浏览器端
              若无唯一标识:
                    服务器会为其创建一个私有的内存空间,可以操作session,把它标识放到浏览器端,标识格式JSESSIONID=ASDHAJSADKASDA
        1 获取session对象:
     

[Java] 纯文本查看 复制代码

?

1

2

3

HttpSession session=request.getSession()

获取JessionId的方式:

 session.getId();

        2 session是一个域对象:

[Java] 纯文本查看 复制代码

?

1

2

3

setAttribute(String name,Object obj) //设置属性值

getAttribute(String name) //获取属性值

removeAttribute(String name) //移除属性值

            生命周期:tomcat默认保存session的时间为30分钟,
                    使用request获取到的只是cookie的字符串,直接操作不会作用到浏览器的cookie,需要新new一个cookie去覆盖
                    创建:java中认为第一次调用request.getSession()时创建
                    销毁:1 服务器非正常关闭会销毁,没有来得及序列化
                              正常关闭,重启服务器都不会销毁。序列化和反序列化了
                              关闭浏览器再打开会消失,JsessionId丢失了,找不见了。session并未消失
                          2 超时: tomcat中设置的session默认存活时间是30分钟,配置在web.xml中
                                 手动设置存活时间:setMaxInactiveInterval(int interval) //单位是秒
                                 超时就会自动销毁
                          3 手动销毁:session.invalidate()
                           作用范围: 只在一次会话中有效。谁建立的会话在那个会话中有效。不会造成多个用户访问数据紊乱
                               因为底层依赖Cookie技术,所以默认浏览器关闭后也会失效。不能跨web应用。

点赞
收藏
评论区
推荐文章
莎利亚 莎利亚
4年前
PHP Cookie与Session的使用与区别
Cookie与SessionCookie和session是目前使用的两种存储机制。cookie是从一个WEB页到下一个WEB页面的数据传送方法,cookie存储在客户端;Session是让数据在页面中持续有效的一个传递方法,session存储在服务器端。掌握了cookie与session这两个技术,在WEB网站页面间信息传递的安全性是
菜园前端 菜园前端
2年前
考考你浏览器缓存有哪些,区别是什么?
原文链接:浏览器缓存主要包含cookie、在HTML5新标准中新增了本地存储localStorage和会话存储sessionStorage。cookie什么是cookie?cookie是一些缓存数据,主要存储在你的电脑中。当你发起网络请求时也会携带当前域名
喷火龙 喷火龙
4年前
cookie和session的详解与区别
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。1.1 C
Wesley13 Wesley13
3年前
Java认证:对session和cookie的一些理解
Java认证:对session和cookie的一些理解博客分类:java这篇文章虽然说的是JAVA中的session和cookie的使用,但是对于其他语言也是适用的。一、cookie机制和session机制的区别具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看
Stella981 Stella981
3年前
Django中的session的使用
一、Session的概念cookie是在浏览器端保存键值对数据,而session是在服务器端保存键值对数据session的使用依赖cookie:在使用Session后,会在Cookie中存储一个sessionid的数据,每次请求时浏览器都会将这个数据发给服务器,服务器在接收到sess
Stella981 Stella981
3年前
Cookie,Session学习(java servlet编程)
Cookie问题:HTTP协议是没有记忆功能的,一次请求结束后,相关数据会被销毁。如果第二次的请求需要使用相同的请求数据怎么办呢?难道是让用户再次请求书写吗?为了解决这个问题,引入了Cookie技术;Cookie技术其实就是浏览器端实现的数据临时存储技术,保存一些必要的数据,当访问某些网页需要这些数据时,浏览器自动将数据加到HTTP请求
Stella981 Stella981
3年前
Cookie技术
一、Cookie技术Cookie技术是将用户的数据存储到客户端的技术,我们分为两方面学习:第一,服务器端怎样将一个Cookie发送到客户端第二,服务器端怎样接受客户端携带的Cookie1.服务器端向客户端发送一个Cookie1)创建Cookie:CookiecookienewCookie(StringcookieName,
Stella981 Stella981
3年前
Django组件——cookie与session
Django组件——cookie与session<fontcolor00bff一、会话跟踪技术</font<fontcolorff7f501、什么是会话跟踪技术</font先了解一下什么是会话。可以把
Stella981 Stella981
3年前
SpringBoot整合SpringSeesion实现共享Session方案
Http协议本身是无状态的,为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息。在单实例应用中,可以考虑应用进程自身存储,随着应用体量的增长,需要横向扩容,多实例Session共享问题随之而来。下面假设我们使用Nginx来实现负载均衡横向扩节点:!(https://oscimg
Easter79 Easter79
3年前
SpringBoot整合SpringSeesion实现共享Session方案
Http协议本身是无状态的,为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息。在单实例应用中,可以考虑应用进程自身存储,随着应用体量的增长,需要横向扩容,多实例Session共享问题随之而来。下面假设我们使用Nginx来实现负载均衡横向扩节点:!(https://oscimg
3A网络 3A网络
2年前
一文读懂浏览器存储与缓存机制
一文读懂浏览器存储与缓存机制浏览器存储CookieCookie是HTTP协议的一种无状态协议。当请求服务器时,HTTP请求都需要携带Cookie,用来验证用户身份。Cookie由服务端生成,存储在客户端,用来维持状态。通常Cookie由以下值构成:名称(name)值(value)域(Domain)值(value)路径(Path)
哑火容器
哑火容器
Lv1
微笑向暖安之若素,你若盛开清风自来。
文章
4
粉丝
0
获赞
0