cookies

客户端会话技术——cookies

什么是Cookies

客户端会话技术:将数据保存在客户端

使用步骤

  1. 创建Cookies对象,绑定数据
1
Cookie ck = new Cookie(String name, String value);
  1. 发送Cookies对象
1
response.addCookies(Cookies cookie);
  1. 获取Cookies对象
1
Cookies[] cks = request.getCookies();

Cookie原理

Cookie是基于HTTP中的set-cookie头和cookie头的

image-20220104002958718

相关问题

能不能一次发送多个Cookie

可以,理论上只需要在Servlet中多次调:

1
2
3
4
Cookie ck1 = new Cookie("123","456");
Cookie ck2 = new Cookie("012","789");
response.addCookie(ck1);
response.addCookie(ck2);

在Response头中,会设置多个set-cookie头,request的cookie头中将会有多个键值对,用;分割

Cookie持久化问题

cookie在默认情况下,cookie存储在浏览器的内存中,当浏览器关闭后,Cookie数据被销毁。

如果期望Cookie能够存储在硬盘中,可以使用setMaxAge(int seconds)方法、

其中seconds可以取下面三种值:

  • 正数:将cookie数据写到硬盘的文件中,seconds代表秒数。
  • 负数:默认值,存在于当前标签页或者浏览器中
  • 0:删除该Cookie

负数的作用范围会小于正数,设置为负数的时候,一旦浏览器标签页被关闭就要销毁,如果设置为正数,则多个标签页可以共享该cookie,只要你请求的URL是一样的就可以,因为在浏览器中,cookie的存储以网站URl为键名,这个涉及到cookie在浏览器中的存储.

Cookie如何存储中文

tomcat 8之前不能直接存储中文,tomcat 8之后支持存储中文

tomcat 8之前需要使用转码工具,转为URL,如%E3

Cookie共享

默认情况下cookie是不共享的,cookie只能在自己的web项目中使用。

如果你期望你的Cookie能够被同一个服务器下的多个web项目共享,那就需要使用setPath(String path)

默认情况下如果不设置该方法,该方法会设置当前项目的虚拟路径。

Cookie特点

  • cookie存储数据在客户端浏览器
  • 浏览器对于单个cookie的大小有限制(4kb)以及对同一个域名下的总cookie数量也有限制(20个)

  • cookie一般用于存储少量的不太敏感的信息

  • cookie一般用于存储偏好设置等

Cookie在浏览器中的存储

IE 浏览器

Windows 系统上 IE 浏览器 Cookie 数据位于 %APPDATA%\Microsoft\Windows\Cookies\ 目录中的 xxx.txt 文件,里面可能有很多个. txt Cookie 文件,如 C:\Users\yren9\AppData\Roaming\Microsoft\Windows\Cookies\0WQ6YROK.txt。

在 IE 浏览器中,IE 将各个站点的 Cookie 分别保存为一个 XXX.txt 这样的纯文本文件;

Firefox 和 Chrome 浏览器

Firefox 和 Chrome 是将所有的 Cookie 都保存在一个文件中,该文件的格式为 SQLite 数据库格式的文件。

Firefox 的 Cookie 数据位于 %APPDATA%\Mozilla\Firefox\Profiles\ 目录中的 xxx.default 目录下,名为 Cookies.sqlite 的文件中,如 C:\Users\jay\AppData\Roaming\Mozilla\Firefox\Profiles\ji4grfex.default\cookies.sqlite

在 Firefox 中查看 Cookie,可以选择“工具>选项>隐私>显示 Cookie”。

Chrome 的 Cookie 数据位于 %LOCALAPPDATA%\Google\Chrome\User Data\Default\ 目录中名为 Cookies 的文件中,如 C:\Users\jay\AppData\Local\Google\Chrome\User Data\Default\Cookies。