cookie入门
会话技术
会话是指一个终端用户与交互系统进行通讯的过程。
一次会话过程中包含多次请求和响应。
浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止。
客户端会话技术:cookie 服务器端会话技术:session
Cookie会话技术
cookie是客户端会话技术,将数据保存到客户端,cookie只能存放字符串数据(键值对)
cookie一般用于存出少量的不太敏感的数据
在不登录的情况下,完成服务器对客户端的身份识别
cookie的原理细节是,客户端在第一次请求的时候,服务器的响应会携带一些数据信息,此时客户端会将这些数据信息放到客户端本地,并在之后的请求中携带这些数据信息。
new Cookie(String name, String value) | 创建Cookie对象,绑定数据 |
response.addCookie(Cookie cookie) | 发送Cookie对象 |
Cookie[] request.getCookies() | 获取Cookie,拿到数据 |
cookie的细节
可以发送多个cookie吗
一次可以发送多个cookie,我们可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可
cookie保存问题
1. 默认情况下,当浏览器关闭后,Cookie数据被销毁
2. 持久化存储:
cookie.setMaxAge(int seconds) |
1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效 |
cookie的中文问题
在tomcat8之前,cookie中不能直接存储中文数据,需要进行转码,一般使用URL转码
在tomcat8之后,cookie支持中文cookie,但不支持特殊字符,如空格,所以也一般使用URL转码
cookie的共享问题
我们有这样一个问题,假设在一个tomcat服务器中,部署了多个web项目,那么这些的web项目的cookie能不能共享呢?
答案是默认情况下是不能的,我们可以通过这个方法设置cookie的获取范围
cookie.setPath(String path) | 设置cookie的获取范围。默认情况下,设置当前的虚拟目录 |
如果设置为本项目的虚拟目录,则本项目的web资源都能获取cookie数据
如果想要设置为其他项目能获取cookie数据,则设置为"/"即可
不同的tomcat服务器cookie共享问题:
setDomain(String path) | 如果设置一级域名相同,那么多个服务器之间cookie可以共享 |
例如:setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
cookie的特点
1. cookie存储数据在客户端浏览器
2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)