Cookies和Session的区别

时间:2023-07-02 20:01:14

 原文:http://www.cnblogs.com/lijihong/p/4743818.html

今天主要学习了Cookies和Session,网络上关于这方面的知识可谓很多,让人眼花缭乱,在此作一个小结。本文不讲多,不讲什么高大上的,只是抛出一块砖,讲三个问题:①什么是Cookies和Session?②为什么要用Cookies和Session;③Session什么情况下被销毁。下一篇文章将以Java为例,简单实践一下。

  1. 什么是Cookies,什么是Session?

  关于这两个概念,很多文章都会给你来一长串定义,balabala一大堆。其实我个人认为这两个东东本质上做了一件事情——记录用户数据(也就是一小段文本)!!!比如,我们登陆论坛的时候,都是自动登陆的,这些数据就是以Cookies或Session方式给你记录下来的。那这两个东东有什么区别呢?最根本的:Cookies是由服务器生成,发送给客户端浏览器,由浏览器保存;Session则保存在服务器端,当然,服务器上有许多Session对象,怎么索引,这里会生成Session ID,以Cookies的方式发送给客户端,之后请求,服务器端就根据Session去索引Session对象,从而获取所需信息。

  关于Cookies结构及相关知识,见参考文献:[2]。

  关于Cookies和Session更多描述,见参考文献:[1]。

  2. 为什么要用这两个东东?

  个人理解:主要是为了方便用户使用,提升用户体验;如果被一些流氓公司利用,做了一些不道德的事,这也让我们很头疼,我们只能禁用Cookies了。。。^_^。

  3. Session什么时候会被销毁?

  Session,中文翻译为会话,顾名思义,我以为Session对象是在访问网站建立,在退出网站是销毁的。其实我错了!其实用户退出浏览器或退出网站,虽然session ID可能找不到了(注意我这里用的是可能,假设Session ID以Cookies方式给客户端保存,并且设定了MaxAge(最大有效时间),则SessionID将会保存到硬盘上,这样Session ID仍然存在),但是服务器上Session对象仍然存在。只有下述三种情况会使session对象被删除:

  • 服务端程序主动删除,即调用HttpSession.inValidate()函数;
  • 距离上一次收到客户端发送session ID的时间间隔超过session的最大有效时间;(哦,Session也是有有效时间的啊!!!)
  • 服务器进程被停止。

  所以,大家别被Session这个名字给误导了~一次会话结束,不会把服务器上的Session对象删掉的。

  最后提一下:

  本文讲的都是一些个人理解,或者在阅读一些知识后的总结,可能有错,请帮忙指出,谢谢;

  关于Cookies,Session其他理论问题,都可以参考文献[1],不想再抄袭;

  关于在Java中,Cookies怎么使用,怎么创建、怎么设置值、Session怎么创建、怎么设置值,等等,这些我们准备下一文具体实践一下。

附:参考文献

[1] cookie、session及实现记住密码,自动登录: http://blog.163.com/xiexueyong1987@126/blog/static/126267342201031993557704/

[2] Java之Cookie详解:http://www.cnblogs.com/z941030/p/4742188.html