关于session的理解
关于session其实要从HTTP协议说起,由于HTTP协议是无状态的协议,也就是说客户端每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况。
用购物车来理解这个无状态:如果是没有session的纯HTTP协议,首先你使用用户名和密码登录到了你的购物车,完成了一次对服务器的请求,然后你想要在购物车添加一个商品,那么你就必须再次对自己的身份进行验证,因为这其实是另一次对服务器的请求,虽然你在之前已经进行了验证,但由于服务端已经结束了对上次请求的反应,服务端对上次的登陆没有记忆,因此你对购物车的操作就必须带着自己登陆的状态。
这样无状态的访问和请求无疑是相当繁琐的,而且每次登录都需要与底层的数据库进行交互,对性能有很大的浪费。通过简单的分析,我们可以发现最好的方式应该是:用户登陆后,可以对购物车进行一系列的连贯操作,直到用户退出。而session机制就实现了这一过程。
用户第一次对服务器发出请求,服务器为用户创建一个用户专属的sessionID用来对用户进行标识和跟踪,而且服务器会讲这个sessionID保存在文件或数据库等。
cookie在session机制中的作用
cookie是用来保存客户端信息的一种机制,用来保存服务器返回的客户端的相关信息。我们已经知道,在客户端向服务器发送第一次请求的时候,服务器会生成一个sessionID并保存起来。其实服务端还会将这个sessionID返回给客户端,由cookie进行保存。客户端每次访问服务器都会将cookie包装在请求中发送给服务器,因此客户端之后的每次请求,都可以被服务端跟踪。
这个过程大概如下图
参考链接:session实现原理