状态保持中的Cookie与Session
状态保持Cookie
Cookie是一种能够让网站服务器把少量数据存储到客户端的硬盘或内存,并且读出来的一种技术。可以用来记录用户的ID,浏览过的网页,或者停留的时间等,当再次通过浏览器访问该网站的时候,浏览器会自动将属于该网站的Cookies发送到服务器去。Cookie可以分为存储在内存中和存储在硬盘两种方式,存储在硬中的时候,一个网站通常有一个.txt文件来存Cookies,一个Cookie对象最终转换为txt文件中的一条记录。保存在浏览器线程分配的内存中的Cookie对象,在关闭这个浏览器窗口后,就销毁了。
创建Cookie
读取Cookie
将Cookie保存到硬盘上,需要在创建Cookie对象后,加上cookie.Expires = DateTime.Now.AddMinutes(2);其参数是距离当前时间的失效间隔时间
设置Cookie的失效
当退出网站的时候,想消除自动登录功能,这时,这个请求发送到服务器端后,虽然服务器端不能操作浏览器端硬盘来删除Cookie记录,可以通过使同名的Cookie失效来达到这个效果。这时,再次访问这个页面的时候,浏览器就不会把name对应的Cookie和password对应的Cookie发送到服务器端,所以,当服务器端无法读取用户名与密码相关的Cookie文件的时候,就无法进行自动登录了。具体拿人人网的例子来讲。当勾选了下次自动登录并且进行登录后,在浏览器端硬盘上写入了Cookie,下次在打开浏览器,转到这个页面的时候,就能自动把用户名和密码发送到服务器端进行登录。如果用户点击退出登录,则服务器端会通过使相关Cookie失效来达到退出登录,此时,如果另外的用户再次进行登录,则会重新写入相关的Cookie,覆盖掉原来的相关Cookie.
状态保持Session
浏览器每一次的http请求都会对应一个Session的id, 如果是第一次与服务器通信,则会创建一个id. 在服务器端,当用到Session的时候,会根据这个id在Session池中寻找相应的Session对象。每次请求在服务器端创建了Session后,会在返回的报文中相应的id,发回到浏览器中,如果这个浏览器窗体再次访问这个网站的时候,就会使用这个id.
两个不同的浏览器窗体是不能共享Session的,因为不同的浏览器进程中保存有不同的Session的id,这些不同的id是以Cookie的形式保存在内存中的,所以,不同的浏览器窗体中的id不同,其在Session池中找到的Session对象也会不同。
在任务管理器中可以看到,不同的浏览器窗体创建了不同的进程
那么,如何使不同的浏览器窗体之间共享一个Session呢,比如说,购物车的应用,这就要求,即使打开不同的浏览器窗体,依然要看到所购买的全部物品。
可以使用保存在硬盘中的Cookie作为中介。当一个浏览器窗体创建了Session对象后,把Session在服务器端的id发回到浏览器端并保存到硬盘而不是缓存中,当打开另外的浏览器窗体的时候,访问购物车的时候,会把相应的Cookie发送到服务器,这里就包含了Session的id,此时,再在服务器端通过这个id找到相应的Session对象,并且操作这个对象。