彻底研究了下cookie和session的原理,发现了很多有趣的东西,原来我的很多想法和制定协议的那些大神们也有相同之处!
cookie是存放于用户的本地的机器上的小文件,由浏览器创建和读写这个文件,
此文件的作用,是存放了用户访问某个网站时的一些资料,比如登陆的帐号,密码等
.
cookie文件存放的内容是由用户访问网站时,网站的服务器根据网站需要,通过
http中cookie的协议,在封包内发给浏览器,而浏览器写入用户的机器硬盘上.
当用户每次访问这个网站时,浏览器都会将相应的这个用户在这个网站上的cookie
读取出来,封装在向服务器发送请求的封包内,服务器的程序可以读取获得cookie的内容.
这就是cookie,最主要的作用就是用户浏览器自动向服务器发送资料来说明自己是
谁.用户如果不发送cookie,服务器是不知道用户是谁,除非用户重新登陆.
而sesion是网站的服务器存储某个用户访问网站的相应数据的,这些数据存储在服
务器上,作用是记住用户在网站上干了些什么事,服务器程序随时可以调用查看,这些资料存储在服务器的内存(进程)内或数据库里,存储的具体内容是根据开发人员自己决定的,想存什么就存什么,对象数组都可以,只要可以流化的数据,大小也没限制,除非内存爆了,而cookie只能存简单字符类的东西,并且最大只能是4k.
这样,往往cookie内的内容可能和session的内容有相同的部分,也可能完全不同,
这就是看网站开发者想怎么干的了.
session的基本原理是,当用户第一次访问这个网站时,服务器自动给这个用户分配
一个session ID号,浏览器只要支持sesion,就会根据session的协议,每次访问网站时都发送这个sesion ID给服务器,服务器就知道原来这次http请求还是上次那个家伙发的,因为http协议是没有状态的协议,而有了sesion ID补充,就识别了用户,而tcp/ip协议就根本不用什么sesion,因为ip地址加端口号就可以识别一个用户,呵呵,但tcp/ip就存在一个代理和网关的问题,导致如果用户不是独立ip访问,就根本不能真正知道用户是谁,扯远了.
为什么sesion知道是第一次访问,怎么知道用户是第一访问的呢?原来sesion存在的前提是浏览器支持cookie,用户第一次访问网站时,cookie内没有session ID,然后服务器是把sesion ID写入了cookie,以后每次访问都从cookie获得的.
但如果该用户浏览器不支持cookie,那么每次请求都没有session ID,服务器就会
每次都认为用户是不同的用户,根本没法在服务器上保存用户之前一些操作结果.
cookie和sesion的区别:cookie能告诉了服务器,我是你们网站的某某会员,因为
cookie内可以有帐号和密码,
sesion只能告诉服务器:我这次访问,和上次访问是同一个人,至于这个人是不是网
站的会员,服务器不知道.除非他去登陆了会员才知道.
是不是不支持cookie就一定不支持session呢?当然不是,asp.net用了一个巧妙的
技巧.前面说了,session的原理就是需要一个session ID,只要每次用户请求都告
诉了这个ID,session就能正常工作了.于是针对此点,asp.net可以在服务器上设置
,将session ID放在url里面,不放在cookie内.效果完全一样,只是id放在url里让
人裸露看到,内心觉得不安,呵呵,其实cookie的原理何尚又安全了呢?
这个设置是在web.config文件中进行的,
<sessionState
cookieless="false" <!-- 这里设置sessionID放在cookie中还是url中 -->
timeout="20"
/>