Session和Cookie的区别

今天座右铭----在黑暗中,尽量去展望黎明的美好!

1、Session:

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
HTTP协议(http://www.w3.org/Protocols/)是“一次性单向”协议。服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTP Request,服务端处理请求,并且返回一个HTTP Response给客户端,本次HTTP Request-Response Cycle结束。 
我们看到,HTTP协议本身并不能支持服务端保存客户端的状态信息。于是,Web Server中引入了session的概念,用来保存客户端的状态信息。
这里用一个形象的比喻来解释session的工作方式。假设Web Server是一个商场的存包处,HTTP Request是一个顾客,第一次来到存包处,管理员把顾客的物品存放在某一个柜子里面(这个柜子就相当于Session),然后把一个号码牌交给这个顾客,作为取包凭证(这个号码牌就是Session ID)。顾客(HTTP Request)下一次来的时候,就要把号码牌(Session ID)交给存包处(Web Server)的管理员。管理员根据号码牌(Session ID)找到相应的柜子(Session),根据顾客(HTTP Request)的请求,Web Server可以取出、更换、添加柜子(Session)中的物品,Web Server也可以让顾客(HTTP Request)的号码牌和号码牌对应的柜子(Session)失效。顾客(HTTP Request)的忘性很大,管理员在顾客回去的时候(HTTP Response)都要重新提醒顾客记住自己的号码牌(Session ID)。这样,顾客(HTTP Request)下次来的时候,就又带着号码牌回来了。 我们可以看到,Session ID实际上是在客户端和服务端之间通过HTTP Request和HTTP Response传来传去的。
2、Cookie:

cookie机制采用的是在客户端保持状态的方案
当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来。当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的Cookie 资料,有的话,就会依据Cookie 里的内容来判断使用者,送出特定的网页内容给你。Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用Cookie 来辨认使用者,以方便送出使用者量身定做的内容,像是Web 接口的免费email 网站,都要用到Cookie。
3、存放位置,内容及大小:
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE
单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。将登陆信息等重要信息存放为SESSION其他信息如果需要保留,可以放在COOKIE中
session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。
session中保存的是对象,cookie中保存的是字符串
cookie 可设置并在本地保留明码信息。session在IE不关闭并服务器不超时只有SESSIONID。当如果想让用户下次登入网站不需要输入用户名或者密码的时候就只能用COOKIE,因为他可以保留相当长的时间(在COOKIE记录被删除或者失效日期之前)。而SESSION就不可以,他不会保留太长时间,而且IE在关闭后就自动清除了SESSIONID记录。在下次登入的时候会请求新的SESSIONID,而服务器想通过用户个人变量校验用户的状态的时候,就不能用COOKIE。如果用设置用户权限是USER。而IE访问的时候就把USER的明码传输到服务器。

4、简述:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 ,考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

5、所以个人建议: 将登陆信息等重要信息存放为SESSION ;其他信息如果需要保留,可以放在COOKIE中。

6、企业除非逼不得已,否则一般是不会用session的,因为session吃内存, 不利于集群, 重启消失

原文地址:https://www.cnblogs.com/qcnh/p/3399977.html