cookie & session
Cookie
simple introduction
由于http是无状态的,因此服务器和客户端建立起`个性的`连接是不可以的,所以使用cookie机制。来标识唯一的用户,这样服务器就可以有选择的给客户端response内容
cookie存在客户端的内存中或者特定的文件中,这由服务器设定,内容就是一段文本。
cookie的有效期:maxAge,当此值为正数时,cookie将持久存在client特定的文件中,直到超过maxAge的时间cookie才会失效。如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。
cookie建立和使用过程:
step1:client请求
step2: 当服务器返回给客户端一个http响应信息时,其中如果包含Set-Cookie这个头部时,意思就是指示客户端建立一个cookie。
step3: 在后续的http请求中自动发送这个cookie到服务器端,直到这个cookie过期。
step4: 请求回应
除了cookie,客户端可以将需要发送的数据包含在请求的url中,包括常见的GET、POST
cookie安全性:
为了保证各自网站指定操作自己的cookie,所以cookie是不可跨域名的,也就是说baidu.com的cookie在访问www.baidu.com只能携带baidu.com的cookie。另外http协议在传输信息的时候是明文的,所以如果在明文下传递存在cookie中的敏感信息是和不安全的,此时可以设定Cookie的secure属性为true,必须使用https传输信息,当然包括cookie
Session
simple introduction
由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车
session在建立在服务端的用户的状态信息,但传送个客户端的是一个session id(一段字符串),客户端随后的请求时将携带这个session id,服务端就可以通过这个session id查到的用户状态信息。Session的使用比Cookie方便,但是过多的Session存储在服务器内存中,会对服务器造成压力。当有大量的请求时,为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
session需要cookie:有因为HTTP是无状态的,所以session不知道请求是不是来自同一客户端,此时服务端会想客户端浏览器发送一个Cookie,它的值就是session id,服务器通过这个cookie来识别是否时同一用户。由于这个cookie的maxAge为-1,存在内存中,所以一般浏览器关闭session id就会丢失。
如果Cookie别禁了:一般利用URL地址重写,将session id写在URL中传递给服务器,另外还有表单隐藏技术。
Cookie与Session的区别
cookie存储在客户端本地,session存储在服务器上
session比cookie安全些
session一般用来跟踪回话,cookie一般保存用户喜好或者保存用户名密码
session可存放在内存、文件、数据库、甚至一个集群中。#django默认是存在数据库中
Cookie有大小限制,一般最大3K
session对cookie有依附关系,session id会存在cookie中(cookie enable),然后写在http头部传给服务端。