session
- .由于http协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用有种机制来识别具体的用户,这个机制就是session。
1.典型的场景比如购物车,当你点击下单按钮时,由于http协议无状态,它并不知道是哪一个用户操作的,所以服务端为特定的用户创建特定的session,用于标识这个用户,并且跟踪用户,这样才知道购物车里面的内容,这个session是保存在服务端的,有唯一的标识。 - .在服务端保存的session的方法很多,内存、数据库、文件都可以,集群的时候也要考虑session的转移,在大型的网站,一般会有专门的session服务器集群,用来保存用户会话,这个时候的session信息都是放在内存的,使用一些缓存服务比如Memcached之类来放session。
session创建于服务器端,保存于服务器,维护于服务器,每创建一个新的session,服务器端都会分配一个唯一ID,并且把这个ID保存到客户端的Cookie中,保存的形式是以JSESSIONID来保存的。
cookie
服务器端是如何识别特定的客户端呢?
- .Cookie登场,每次http请求的时候,客户端都会发送相应的cookie信息到服务端。实际上大多数的应用都是用cookie来实现session的跟踪,第一次创建session的时候,服务端会在http协议中告诉客户端,需要在cookie里面记录一个session ID,以后每次请求都会把这个ID发送到服务器,此时就知道对方的身份
有人问,如果客户端的浏览器禁用来cookie怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行回话更总,既每次http交互,URL后面都会被附加上一个诸如sid=xxxx这样的参数,服务端据此来识别用户 - .cookie是浏览器保存信息的一种方式,可以理解为一个文件,保存在客户端,服务器可以通过响应浏览器的set-cookie的标头,设置cookie的信息,保存在客户端,你可以给这个文件设置一个期限,这个期限,不会因为浏览器的关闭而消失,其实大家应该对这个效果并不陌生,很多网购的网站都是这样做的,即使你没有买东西,它也会记住的喜好,会优先推荐你喜欢的东西
- .cookie其实还可以在一些方便用户的场景下,设想你登录过一个网站,下次登陆的时候不想在输入帐号了,怎么办?这个信息可以写在cookie中,访问网站的时候,网站页面的脚本可以读取这个信息,自动帮你把用户名给填写,能够方便用户,这个也是cookie的由来,但也因此cookie存在一定的安全隐患
总结
- .seesion是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中
- .cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现session的一种方式