先说 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.souzz.net
on: 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 入侵程序。
(可惜我原先那他没干正经事情,做 WEB 游戏挂机程序来的 )
附一个不错的回贴 :
------------------------------------------------------------------------------------------------------
COOKIE 是本地文件,是 40 大盗在阿里巴巴家做的记号,
或者是送牛奶的人在你家门口钉的箱子。
SESSION 是服务器端内存,是你洗澡时浴池发给你的钥匙。
自己专用,可以开自己的好多箱子。
APPLICATION 是公共浴池。
在这里能看见所有人,包括 ppmm 哦:)。