因为HTTP协议是无状态的,为了记录用户状态信息,需要采取一些措施。
session,会话,是一种服务端和客户端之间的状态关联。
服务端使用session探知分辨客户端信息。第一次创建session的时候,服务端会把session id发到客户端,客户端把这个id记录在本地cookie里,以后请求的时候带着这个session id。
(如果客户端禁用cookie,则可以使用url重写技术,在url后面附加上诸如sid=xxxx这样的参数,方便服务器识别用户)
所以session的实现需要客户端和服务端的配合。在服务端,服务器需要存储session id和对应的用户数据。
客户端需要从服务端获取session id,以后请求的时候带着这个发出。
综上所述,cookie是客观存在的,session是一个。
session的实现要依赖cookie。session的实现方式(后端存储,设置cookie等)有很多种方法。
关于cookie的设置,是通过服务器返回的 Set-Cookie 字段来设置的,这个字段的形式如下:
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
可以看到,在这里能够设置失效日期,应用cookie的url,标志通过ssh,https生成等
之后客户端请求的时候,请求字段中包含的cookie如下:
Cookie: value
cookie的缺点有:给请求增加流量,存储在客户端,有安全性问题(除非https),大小限制在4kb等。
如果服务端向客户端返回了加密cookie,服务端能够验证这个cookie,那么就能提升cookie的安全性。