flutter 从移动端开始

cookie全解

2019-07-12  本文已影响0人  super_chao

cookie是什么

百度百科

划重点

1.cookie有两种看下面【cookie分类】
2.cookie是通过header传递的
3.一个浏览器能创建的 Cookie 数量最多为 300 个,并且每个不能超过 4KB,每个 Web 站点能设置的 Cookie 总数不能超过 20 个
4.cookie是不安全的,或句话说就是需要进行很多安全上的操作 。

cookie分类

cookie 是服务器存储在客服端上的小数据文件,可以在服务器端随时更改和获取内容。
Cookie 在计算机中是个存储在浏览器目录中的文本文件,当浏览器运行时,存储在 RAM 中发挥作用 (此种 Cookies 称作 Session Cookies),一旦用户从该网站或服务器退出,Cookie 可存储在用户本地的硬盘上 (此种 Cookies 称作 Persistent Cookies)。

设置cookie怎么安全,否则不要写。

1)设置该 Cookie 不能被脚本读取,这样在一定程度上解决上述问题。
  2)对 Cookie 内容进行加密,在加密前嵌入时间戳,保证每次加密后的密文都不一样(并且可以防止消息重放)。
  3)客户端请求时,每次或定时更新 Cookie 内容(即:基于第2小条,重新加密)
  4)每次向 Cookie 写入时间戳,数据库需要记录最后一次时间戳(防止 Cookie 篡改,或重放攻击)。
  5)客户端提交 Cookie 时,先解密然后校验时间戳,时间戳若小于数据数据库中记录,即意味发生攻击。

用途

Cookie 的用途之一是存储用户在特定网站上的密码和 ID。
也用于存储起始页的首选项。

Cookie的传递流程

当在浏览器地址栏中键入了Amazon的URL,浏览器会向Amazon发送一个读取网页的请求,并将结果在显示器上显示。这时该网页在你的电脑上寻找Amazon网站设置的Cookie文件,如果找到,浏览器会把Cookie文件中的数据连同前面输入的URL一同发送到Amazon服务器。服务器收到Cookie数据,就会在他的数据库中检索你的ID,你的购物记录、个人喜好等信息,并记录下新的内容,增加到数据库和Cookie文件中去。如果没有检测到Cookie或者你的Cookie信息与数据库中的信息不符合,则说明你是第一次浏览该网站,服务器的CGI程序将为你创建新的ID信息,并保存到数据库中。

Cookie是利用了网页代码中的HTTP头信息进行传递的,浏览器的每一次网页请求,都可以伴随Cookie传递,例如,浏览器的打开或刷新网页操作。服务器将Cookie添加到网页的HTTP头信息中,伴随网页数据传回到你的浏览器,浏览器会根据你电脑中的Cookie设置选择是否保存这些数据。如果浏览器不允许Cookie保存,则关掉浏览器后,这些数据就消失。Cookie在电脑上保存的时间是不一样的,这些都是由服务器的设置不同决定的。Cookie有一个Expires(有效期)属性,这个属性决定了Cookie的保存时间,服务器可以通过设定Expires字段的数值,来改变Cookie的保存时间。如果不设置该属性,那么Cookie只在浏览网页期间有效,关闭浏览器,这些Cookie自动消失,绝大多数网站属于这种情况。通常情况下,Cookie包含Server、Expires、Name、value这几个字段,其中对服务器有用的只是Name和value字段,Expires等字段的内容仅仅是为了告诉浏览器如何处理这些Cookies。

cookie常见参数

cookieName=《mader》; 
expires=《Fri, 31 Dec 2017 15:59:59 GMT》;
 path=《/mydir》; 
domain=《cnblogs.com》; 
max-age=《3600》;
 secure=《true》";

cookieName=mader :name=value,cookie的名称和值
expires=Fri, 31 Dec 2017 15:59:59 GMT: expires,cookie过期的日期,如果没有定义,cookie会在对话结束时过期。日期格式为 new Date().toUTCString()
path=/mydir: path=path (例如 '/', '/mydir') 如果没有定义,默认为当前文档位置的路径。
domain=cnblogs.com: 指定域(例如 'example.com', '.example.com' (包括所有子域名), 'subdomain.example.com') 如果没有定义,默认为当前文档位置的路径的域名部分。
max-age=3600: 文档被查看后cookie过期时间,单位为秒
secure=true: cookie只会被https传输 ,即加密的https链接传输

🔥问题与思考

1. 客户端设置的cookie和服务器设置cookie的区别?

前端写的cookie更多的是想不需重复认证的时间段,后端写更多的是绑定session,获取用户信息 ,制定相关返回的数据 。

2. 客户端设置的cookie和服务器设置cookie的能同时写吗?

是可以同时写的,但是要进行避免时效不一致的判断,同一cookie时效不一致往往会导致请求失败 而找不到问题原因。综合考虑推荐在服务端写.客户端只设置接收 。

3. 服务端写cookie注意什么?

前端要设置withCredentials,后端要设置Access-Control-Allow-Credentials。保持一致 。
Access-Control-Allow-Origin是允许跨源的,通常设置为'*'。但是设置了Access-Control-Allow-Credentials后,就必须写跟Request HeadersOrigin相同的地址了。证书就是一个网址。

上一篇下一篇

猜你喜欢

热点阅读