cookie
Posted asfeixue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie相关的知识,希望对你有一定的参考价值。
cookie是什么?
cookie是存储在浏览器中的纯文本,浏览器的安装目录会有专门的cookie文件夹存放各个域下设置的cookie。
cookie用途?
一般用于存储用户登录凭证,或者一些简单的业务信息。其容量有限,不适合存太多数据。
cookie如何使用?
如下所示,后端可以在response中通过addCookie操作,加入相应的cookie。
Cookie cookie = new Cookie("userId", loginLogVO.getUserId().toString()); cookie.setPath("/"); cookie.setDomain("xxx.com"); cookie.setMaxAge(30000); response.addCookie(cookie);
客户端不需要做特殊的处理。浏览器识别到cookie有效的请求场合,会自动将相应的cookie作为header的一个字段发起请求。
什么情况下,cookie会存在问题?
-
cookie不支持设置在ip,localhost等请求domain下。
如http://localhost:8080或者http://192.168.1.10:8080下无法设置cookie。
-
cookie设置的domain
设置cookie时可以指定domain域名,子域名可以共享主域的数据,删除时也必须明确指定域名,否则无法删除。
设置cookie时不指定域名,使用默认值,则表示只有当前域名可见,删除时也不需要指定域名,否则无法删除。
-
cookie设置的path
不设置的情况下,只有设置该cookie的URI及其子路径可以访问,在做单点登录时,path设置为/,就可以支持域名下的任意路径都带上该数据。
-
cookie设置的expires
不设置的情况下,默认有效期为session,即会话cookie。设置的时候,格式必须是GMT格式的时间(可以通过 new Date().toGMTString()
或者 new Date().toUTCString()
来获得)。
-
cookie设置的secure
当请求时https或者其它安全协议时,包含secure选项的cookie才能被发送到服务器。
-
cookie设置domain前面是否带‘.‘
带点:任何 subdomain 都可以访问,包括父 domain
不带点:只有完全一样的域名才能访问,subdomain 不能(但在 IE 下比较特殊,它支持 subdomain 访问)
-
不符合规则约束
domain规则如下:
1、必须是1-9、a-z、A-Z、. 、- (注意是-不是_)这几个字符组成
2、必须是数字或字母开头
path规则如下:
1、字符必须是在 0x20-0x7E之间,并且不能出现”;”号
cookie value规则如下:
1、会自动去除开头和结尾的引号”
2、如果包含以下规则字符则校验失败:
c < 0x21 || c == 0x22 || c == 0x2c || c == 0x3b || c == 0x5c || c == 0x7f
-
发生跨域请求
cors跨域时,是否携带cookie,存在如下限制:
.withCredentials()方法可以激活发送原始cookie的能力,不过只有在Access-Control-Allow-Origin不是一个通配符(*),并且Access-Control-Allow-Credentials为’true’的情况下才行.
后端在处理跨域时,需要做些相应的处理,
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
前端才能在跨域成功的基础上带上cookie到后端。
以上是关于cookie的主要内容,如果未能解决你的问题,请参考以下文章