cookies
客户端会话技术——cookies
什么是Cookies
客户端会话技术:将数据保存在客户端
使用步骤
- 创建Cookies对象,绑定数据
1 | Cookie ck = new Cookie(String name, String value); |
- 发送Cookies对象
1 | response.addCookies(Cookies cookie); |
- 获取Cookies对象
1 | Cookies[] cks = request.getCookies(); |
Cookie原理
Cookie是基于HTTP中的set-cookie头和cookie头的
相关问题
能不能一次发送多个Cookie
可以,理论上只需要在Servlet中多次调:
1 | Cookie ck1 = new Cookie("123","456"); |
在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。