参考资料
Session原理简述(赞一下这个,毕竟是自己写的,而且博客风格很好,简单,清晰
)
cookie 和session 的区别详解
cookie机制和session机制的原理和区别[转]
HTTP Session和Cookie工作原理
Cookie和会话状态session的工作原理
session原理
为什么要使用session和cookie
为了解决HTTP是个无状态协议所带来的问题
定义
session
服务端为了保持解决Http无状态带来的问题的一种保持客户端与服务器会话状态的一种机制
cookie
客户端为了配合session,保持客户端与服务端会话状态的一种机制
个人总结,高手勿怪
引用高手博客
cookie的机制采用的是在客户端保持状态的方案,cookie占用客户端的存储空间,一般是内存
session的机制采用的是在服务端保持状态的一种方案,session占用服务端的内存空间
session机制可能需要借助cookie来达到保存标识的目的(实际上还有其他选择,比如重写URL或者隐藏表单域)
定义不是特别好理解,请看下面的栗子
小栗子
注意
我使用的语言是Node.js
session
可以理解为一张放在服务器内存的表,记录了类似这样的信息
'phCp-9zlu80ib8o9RLlLac97jG25xMYA':这个就是SESSIONID,如果客户端发送过来的cookie的值和SESSIONID想匹配,那么服务端就能通过req.session得到SESSIONID后对应的结果。('{"cookie":{"originalMaxAge":600000,"expires":"201504-18T03:46:16.449Z","secure":false,"httpOnly":true,"path":"/"},"views":1}' ) "cookie":{"originalMaxAge":600000,"expires":"201504-18T03:46:16.449Z","secure":false,"httpOnly":true,"path":"/"}:这个事配置信息,可以看到服务端写入客户端的cookie的一些基本信息,这个实在配置session的时候就决定了的 "views":1:这个事用户自定义字段,服务端通过req.session.view=1来设定的。用户的cookie还没有过期,服务端与之匹配的SESSIONID这个字段就会存在,此时再进行一次访问,服务端就可以通过view字段得知该用户已经浏览过一次该页面了,然后将view++。这样就可以统计用户的访问次数了。1
2
3sessions: {
'phCp-9zlu80ib8o9RLlLac97jG25xMYA':'{"cookie":{"originalMaxAge":600000,"expires":"201504-18T03:46:16.449Z","secure":false,"httpOnly":true,"path":"/"},"views":1}'
}
cookie
存在于客户端(可以使内存,也可以是硬盘)。在cookie还未过期的时候,客户端发送的http请求头信息中,会带有如图绿框所示的字段 Cookie属性下有三个字段:上面两个是其他网页设置的cookie值,最下面的connect.sid,就是我们刚刚设定的SESSIONID,看起来和上面的SESSIONID貌似不太一样,是因为这个值被加密了。 服务端接收到客户端请求之后,在http应答的头信息中设置cookie,看下图红框所示的字段中,有一个set-cookie字段,这里面记录了cookie的基本属性和加密了的SESSIONID