博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cookie 你咋还没整明白?
阅读量:7173 次
发布时间:2019-06-29

本文共 1866 字,大约阅读时间需要 6 分钟。

1. cookie 比较重要的属性

过期时间(expires)

expires的值是一个时间点(cookie失效时刻= expires)

Expires 为 Cookie 的删除设置一个5分钟的过期的日期

var d = new Date();d.setTime(d.getTime() + 5*60*1000); // in millisecondsdocument.cookie = 'foo=bar;path=/;expires='+d.toGMTString()+';';// GMT 格式的时间复制代码
存活时间(max-age)

max-age 的值是一个以秒为单位时间段(cookie失效时刻= 创建时刻+ max-age)

max-age 的默认值是 -1(即有效期为 session );若max-age有三种可能值:负数、0、正数。负数:有效期session;0:删除cookie;正数:有效期为创建时刻+ max-age

Max-age 设置一个 Cookie 将要过期的秒数

document.cookie = 'foo=bar;path=/;max-age='+5*60+';';复制代码
为什么有的过期时间是1969 ?

1969-12-31T23:59:59.000Z

console.log(new Date('1969-12-31T23:59:59.000Z').getTime())// -1000复制代码

根据测试的4款浏览器这种cookie的过期时间显示如下:

  • FireFox:会话
  • Safair:会话
  • Chrome:1969-12-31T23:59:59.000Z
  • Opera:1969-12-31T23:59:59.000Z

这个cookie称为 Session Cookie ,将会一直存在直到关闭浏览器,(在不设置过期时间的情况下,这个是默认值)

问:我应该设置哪个?

答:expires,浏览器实现比较好,所有浏览器会正确使用它来保存 Cookie,只需要记得像上边示例那样设置它的 GMT 时间就行了。

domain 选项

指定了 cookie 将要被发送至哪个或哪些域中。默认情况下,domain 会被设置为创建该 cookie 的页面所在的域名,所以当给相同域名发送请求时该 cookie 会被发送至服务器。例如,

设置 .example.com

  • ....example.com 都可以使用

但是设置了 .fvt.example.com

  • 不可以使用

可以使用下面的语句在浏览器中尝试

document.cookie = "example=2; expires=Mon, 11 Nov 2026 07:34:46 GMT; domain=test.com;path=/""example=2; expires=Mon, 11 Nov 2020 07:34:46 GMT; domain=test.com;path=/"复制代码

关于cookie域的详细讨论:

path

path 选项值会与 /test,/test2 等等相匹配;任何以 /test 开头的选项都是合法的。需要注意的是,只有在 domain 选项核实完毕之后才会对 path 属性进行比较。path 属性的默认值是发送 Set-Cookie 消息头所对应的 URL 中的 path 部分

所以domainpath2个选项共同决定了cookie何时被浏览器自动添加到请求头部中发送出去。如果没有设置这两个选项,则会使用默认值。domain的默认值为设置该cookie的网页所在的域名,path默认值为设置该cookie的网页所在的目录。

HTTP-Only cookies

一般来说,只有服务器操作Cookie 才能保证一些必要的安全。但有时候,可能需要前端来增删改查 Cookie, 这个时候咱们的主角出现了——HttpOnly

documen.coookie 不能读取到 当然也不能设置和更改

2.session 是啥?

session 的概念 ?

一个会话状态,不是实际存在的东西

session 的实现 ?

Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

session id 存在前端浏览器的cookie 中,比如常说、的token

...

转载于:https://juejin.im/post/5c4e73d5e51d45522a4256fc

你可能感兴趣的文章
class_create(),device_create自动创建设备文件结点【转】
查看>>
shell 编程
查看>>
PLSQL的DBMS_GETLINE
查看>>
c语言编程风格
查看>>
ylbtech-LanguageSamples-OperatorOverLoading(运算符重载)
查看>>
Effective C++ (7) 强制类型转换
查看>>
三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较
查看>>
分享WCF聊天程序--WCFChat
查看>>
NSubstitute完全手册(九)检查接收到的调用
查看>>
Druid:一个用于大数据实时处理的开源分布式系统
查看>>
网站制作中建议你必须特别注意的问题
查看>>
ASP.NET中TextBox控件设置ReadOnly="true"后台取不到值
查看>>
找出Java进程ID pid的N种方法
查看>>
SSH和SFTP简介
查看>>
借助JRebel使Tomcat支持热部署
查看>>
Android Studio导入第三方类库的方法
查看>>
基于Mozilla Thunderbird的扩展开发(八)---进程间通信之Socket篇(续)
查看>>
AliSQL编译安装
查看>>
再谈java枚举 ENUM
查看>>
如何在应用系统中实现数据权限的控制功能(2)
查看>>