|
对session和cookie的区分和理解 先说session
对session的争论好象一直没有停止过,但是幺麽能理解session的人应该占90以上。但还是讲讲,别嫌老~
有一些人赞成用session,有一些人不赞成。但这个问题到底要怎么说。不妨听听我的看法,假如有错误请不要朝丢东西,金条和硬币除外。
有些人应该知道我是做江湖程式的,而江湖程式做看中的就是效率,但这里不谈设计,而从一些比较实际的角度看session。
首先要先说session是干什么的,session是能够存储针对和某一个用户的ie连同通过其当前窗口打开的任何窗口具备针对性的用户信息存储机制。为什么要这样说。看下边先研究session是如何启动的,当打开ie以后浏览网站后会发出一个指令请求sessionid连同对各个类型数据的下载许可,如图片,声音连同flash。 数据实际传输内容:ie到服务器 get / http/1.1 accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* accept-language0: zh-cn accept-encoding: gzip, deflate user-agent: mozilla/4.0 (compatible; msie 5.01; windows nt 5.0) host: www.jh521.com connection: keep-alive 服务器会返回一个没有被使用的sessionid让ie使用,当时ie就对返回sessionid做存储
并同时返回相关页面的下载数据,如下:服务器到ie http/1.1 200 ok server: microsoft-iis/5.0 date: sun, 30 nov 2003 16:41:51 gmt content-length: 21174..content-type: text/html set-cookie: aspsessionidcacbbbrt=ibomfonaojfeebhbpienjffc; path=/ cache-control: private 然后就是页面html代码此时这个ie程式(不是客户机)的sessionid就为ibomfonaojfeebhbpienjffc而当ie在访问任何这个站点的asp程式的时候,就会把ibomfonaojfeebhbpienjffc发送给服务器,服务器就会知道ibomfonaojfeebhbpienjffc是表示您而在服务器上配置session("name")="name"完万能够看成是session("ibomfonaojfeebhbpienjffc")("name")="name" 或 session(sessionid)("name")="name" 这样,session就区分开用户了。 而当服务器反馈这个id的时候会看这个id有没有被使用。假如有在换一个 反正不会让您重复,假如想模拟某人的session的id来进行欺骗是能够的。但是要获取到对方ie传输信号,并且在确保当时这个sessionid没有被取消的情况下才可能实施。
但是要是我有那时间直接通过post信号找他name和pass了。我可不费这个劲,想必一些人明白了了sessionid到底是如何工作的,那么就在看看cookie,有人说sessionid就是cookie,按照技术上来讲他们不属于同类,但是属于一种工作模式,用户和服务器传输私有数据.当我配置cookie的时候,服务器会反馈给ie一个指令。ie通过这个网络指令生成cookie并存放,在特定的时候会取得这个这个信息如在访问这个站点并且cookid有效的时候。
那么为什么要用cookie而不用session呢 看下区别
有效时间连同存储方式 传输内容 cookie 可配置并在本地保留 明码信息
session 在ie不关闭并服务器不超时 只有sessionid
当假如想让用户下次登入网站无需输入用户名或密码的时候就只能用cookie,
因为他能够保留相当长的时间(在cookie记录被删除或失效日期之前)
而session就不能够,他不会保留太长时间,而且ie在关闭后就自动清除了sessionid记录
在下次登入的时候会请求新的sessionid
而服务器想通过用户个人变量校验用户的状态的时候,就不能用cookie
假如用配置用户权限是user。而ie访问的时候就把user的明码传输到服务器。
那么假如我通过一定手段,比如直接修改cookie记录,把user修改成admin呢~~
就麻烦了。
但存储用户名和密码或网站的配色方案这样的信息,用cookie是最好的
好,有点累了,在说说这个东西 request.servervariables("http_referer")
我想有一些人通过这个request.servervariables("http_referer") 来进行一些关键性限制,特别是对付远程提交连同非法侵入。 那么我就要提醒下服务器取得的http_referer信息完全是ie传输给服务器的,能够模拟 而且难度不大,用不到半个小时就能够用vb做出一个针对http_referer入侵程式。
|