Cookie和Session

发布时间:2023年12月29日

Cookie

1.概念:客户端会话技术,将数据保存到客户端

  • 使用步骤:

    1.创建Cookie对象,绑定数据

    • new Cookie(String name, String value)

    2.发送Cookie对象

    • response.addCookie(Cookie cookie)

    3.获取Cookie,拿到数据

    • Cookie[] request.getCookies()

  • 实现原理 基于响应头set-cookie和请求头cookie实现

(1)Cookie 的概念和工作原理:

Cookie 是指某些网站为了辨别用户身份、进行 Session 跟踪 而储存在用户本地终端上的数据(通常经过加密)。当用户在浏 览器中输入链接地址,第一次打开对应的网站时,网站就会通过 自己的服务器把用户信息暂时存储在用户本地内存或硬盘中。当 用户第二次访问该网站时,服务器就会在用户本地内存或硬盘中 读取用户信息,来判断当前上网用户的身份或用户在浏览网页时 做了哪些事。例如,当访客第一次登录网站时选中“记住我”复选框,则 Cookie 中会记录下访客的用户名和密码,如图所示:

当用户再次访问该网站时,就能直接登录该网站。每个 Web 浏览器都会有独立的空间来存放 Cookie。这就相当于给 Web 浏览器颁发了一个通行证,每人一个,无论谁访问都必须携带自己的 通行证。这样,Web 服务器就能从通行证上确认客户身份了。这就是 Cookie 的工作原理。值得注 意的是,现在 Cookie 文件中的内容大多经过加密处理,虽然表面看上去是一些字母和数字的组合, 但是需要 Web 服务器的 CGI 处理程序才会知道它真正的含义。

(2)Cookie 经常使用的场景:

①用来记录访客的一些信息,例如,访客登录的用户名和密码,购物车里的商品信息,访客 访问网页的次数等。

②在 Web 浏览器之间传递变量,例如,如果用户需要声明一个变量 username=jessica,想把这 个变量传递到另一个页面,就可以把变量 username 用 Cookie 的形式保存下来,然后到那一页去读 取这个变量的值。

③可以把一些页面 CSS、图片存储在 Cookie 的临时文件夹中,这样当用户再次访问该网页时, 会大大提高浏览的速度。

2.Cookie的特点和作用

 ?  1. cookie存储数据在客户端浏览器
 ? ? ? ? ?  2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
?
 作用:(简而言之,cookie一般用来存储一些并不敏感的数据)
 ? ? ?  1. cookie一般用于存出少量的不太敏感的数据
 ? ? ?  2. 在不登录的情况下,完成服务器对客户端的身份识别(比如在不登录的情况下打开淘宝等电商网站)

3.cookie的注意事项

  1. 一次可不可以发送多个cookie? 可以 可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。

  2. cookie在浏览器中保存多长时间? 1. 默认情况下,当浏览器关闭后,Cookie数据被销毁 2. 持久化存储: * setMaxAge(int seconds) 1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效 2. 负数:默认值 3. 零:删除cookie信息

  3. cookie能不能存中文? * 在tomcat 8 之前 cookie中不能直接存储中文数据。 * 需要将中文数据转码---一般采用URL编码(%E3) * 在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析

  4. cookie共享问题?

    1.假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?

    • 默认情况下cookie不能共享

    • setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录

      • 如果要共享,则可以将path设置为"/"

    2.不同的tomcat服务器间cookie共享问题?

    • setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享

    • setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享

  5. cookie 文件存放在客户端 cookie 即可以用客户端 javascript 读写,也可以用服务器端 php、jsp等读写。

  6. 每个网站只能访问自己网站的cookie 即百度创建的cookie,新浪是不能够访问的。

  7. 每个浏览器只能访问自己浏览器的cookie cookie 的内容是纯文本,即只能保存字符串数据。

    cookie 依赖于www服务 ,即设置和获取cookie时,要用 http 访问网页。火狐除外。

4.浏览器Cookie数量及大小限制

浏览器允许每个域名所包含的cookie数 Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但实际上IE6就已经最多允许每个域名50个cookie。

Firefox每个域名cookie限制为50个。firefox 3.6可以存150个cookie。

Opera每个域名cookie限制为30个。

Safari / WebKit没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。

5.cookie的缺点

cookie的缺点主要集中于安全性和隐私保护

  1. cookie可能被禁用

  2. cookie不能跨浏览器

  3. cookie可能被删除

  4. cookie安全性不够高

  5. 在浏览器向服务器发送请求时 cookie会随着请求(请求可以携带一定的数据)一同发送给服务器, 会影响请求和响应的速率

  6. cookie 存储大小之后 4k , cookie的存储条数 一般为50条

Session

1.概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession

使用步骤:

 ?  1. 获取HttpSession对象:
 ? ? ?  HttpSession session = request.getSession();
 ?  1. 使用HttpSession对象:
 ? ? ?  Object getAttribute(String name) ?
 ?  void setAttribute(String name, Object value)
 ? ? ?  void removeAttribute(String name) ?

需要注意的是,session的使用是依赖于cookie的

(1)Session 的概念和工作原理:

Session 是另一种记录客户状态的机制,是一次浏览器和服务器的交互的会话。会话是什么呢? 浏览器请求一次服务器,服务器接收请求,处理之后,给出响应,这就是一次会话。为了记录 Session,在客户端和服务器端都要保存数据,客户端记录一个标记(session_id),服务器端不但存 储了这个标记同时还存储了这个标记映射的数据(key-value)。在服务器端记录的 key-value,其 中 key 是指 session_id,value 是指 Session 的详细内容。用户在做 HTTP 请求时,会生成一个随机 且唯一的 session_id,并传递给服务器,服务器把它存储在内存中。然后服务器根据这个 session_id 来查询 Session 的内容(即 value)。当关闭页面时,此 session_id 会自动注销,重新登录此页面时, 又会再次生成随机且唯一的 session_id。 Session 的工作原理如下图所示:

(2)Session 经常使用的场景:

Session 和 Cookie 在本质上没有什么区别,都是针对 HTTP 的无状态而提出的,因为是无状态 的,所以无法得知用户的浏览状态和信息。通过 Session 则可以记录用户指定的相关信息,以供用 户以此身份和信息再次登录此网页,提交请求时做确认。例如,在购物网站,通过 Session 可以记 录用户的登录信息,用户浏览了哪些商品,购物车里放了哪些商品,以及用户购买了哪些商品等。 要是没有 Session,用户每次进入一个页面都需要输入一次用户名和密码。

Session 适用于存储信息量比较少并且对存储内容不需要长期存储的情况。

session的注意事项

  1. 当客户端关闭后,服务器不关闭,两次获取session是否为同一个? * 默认情况下。不是。 * 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。 Cookie c = new Cookie("JSESSIONID",session.getId()); c.setMaxAge(60*60); response.addCookie(c);

  2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗? * 不是同一个,但是要确保数据不丢失(以电商网站为例,购物车内的物品不会随着服务器的关闭而消失)。tomcat自动完成以下工作 * session的钝化: * 在服务器正常关闭之前,将session对象系列化到硬盘上 * session的活化: * 在服务器启动后,将session文件转化为内存中的session对象即可。

Cookie和Session的区别

  1. session存储数据在服务器端,Cookie在客户端

  2. session没有数据大小限制,Cookie有

  3. session数据安全,Cookie相对于不安全

文章来源:https://blog.csdn.net/weixin_62988359/article/details/135283989
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。