💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # Cookie ## 概念 服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。 ## 用途 在保留无状态协议这个特征的同时又要解决类似记录状态的矛盾问题。 ## 实现 * 服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie * 浏览器通过 document.cookie 设置和获取 ## 首部 ### Set-Cookie 响应首部字段。开始管理状态所使用的Cookie信息。 ### Cookie 请求首部字段。服务器接收到的Cookie信息。 ## 属性 ### name 必须。 该Cookie的名称。Cookie一旦创建,名称便不可更改。 ### value 该Cookie失效的时间,单位秒。默认为–1。 * 如果为正数,则该Cookie在>maxAge秒之后失效 * 如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie * 如果为0,表示删除该Cookie。 ### secure 默认为false 是否仅被使用安全协议传输。安全协议。 ### expires 指定浏览器可发送 Cookie 的有效期。当省略expires 属性时,Cookie 仅在浏览器关闭之前有效 ### path 限制指定 Cookie 的发送范围的文件目录 ### domain 可以访问该Cookie的域名。第一个字符必须为“.” 如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。 ### HttpOnly 使JavaScript 脚本无法获得Cookie,默认为false。 要目的为防止跨站脚本攻击(Cross-sitescripting,XSS)对Cookie 的信息窃取。 # Session ## 概念 一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 ## 实现 1. 服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id) 2. 如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个) 3. 如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id 4. session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存 ## Cookie被禁用的解决方案 * URL重写 * 表单隐藏字段 # Cookie 与 Session 的区别 ## 存取方式的不同 Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码 而Session中能够存取任何类型的数据 ## 隐私策略的不同 Cookie存储在客户端阅读器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容 Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险 ## 有效期上的不同 ## 服务器压力的不同 ## 浏览器支持的不同 Cookie是需要客户端浏览器支持的。假如客户端禁用了Cookie,或者不支持Cookie,则会话跟踪会失效。 关于WAP上的应用,常规的Cookie就派不上用场了。 Session不依赖客户端 ## 跨域支持上的不同 Cookie支持子域名访问主域名Cookie Session仅在他所在的域名内有效