我对session和cookie的最最最最。最最最。最最。最深刻的理解[新人进,不是新人也来看看]

cueixu1 2003-12-01 02:19:56
发起这个帖子,是刚才看见一个网友的疑惑,以及我在做一个叫做[玫瑰战争的]CGI游戏

中得到的经验。

先说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入侵程序。
(可惜我原先那他没干正经事情,做WEB游戏挂机程序来的)
...全文
80 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzzzzzzzzzzzz 2003-12-23
  • 打赏
  • 举报
回复
多谢楼主的资料,望大家多向cueixu1(紫之龙) 学习。
twtetgso 2003-12-02
  • 打赏
  • 举报
回复
不错,学习,楼主高人
chenxingbai 2003-12-02
  • 打赏
  • 举报
回复
不错
OldPhoto 2003-12-02
  • 打赏
  • 举报
回复
呵呵……藏ING
jiank 2003-12-02
  • 打赏
  • 举报
回复
我想有一些人通过这个Request.ServerVariables("HTTP_REFERER")
来进行一些关键性限制,特别是对付远程提交以及非法侵入。
那么我就要提醒下服务器取得的HTTP_REFERER信息完全是IE传输给服务器的,可以模拟
而且难度不大,用不到半个小时就可以用VB做出一个针对HTTP_REFERER入侵程序。
(可惜我原先那他没干正经事情,做WEB游戏挂机程序来的)
===========================================================================

我想问一下,为什么我的服务器上一旦使用了Request.ServerVariables("HTTP_REFERER")
来防止非法提交及侵入,有一部分用户就不能正常使用该功能,请问这是为什么?对方使用客户端为WIN98英文版。注:对这个用户来说,只要是使用该功能的网站都不能正常使用。

对于SESSION的过期机制我想补充一下:经过我的测试,发现各个SESSION的过期时间是一样的,但是不是集体失效,而是一个一个失效,除非使用了SESSION.ABANDON。
另外:SESSION还有一个BUG,就是在一台机上,打开两个IE,在两个一个页面上,本来应该不同的SESSION变量会变成一样的,这种机率我试过是100%,原因至今不明,无补丁。请大家慎用!
liuzxit 2003-12-02
  • 打赏
  • 举报
回复
難得的好文﹐澄清了我很多模糊概念﹐謝謝

繼續關注
xxrl 2003-12-02
  • 打赏
  • 举报
回复
楼主怎么没有对session的存贮机制进行一番说明呢?对于session的内存占有量怎么也没有说明呢?看来还得努力啊
qfacy 2003-12-02
  • 打赏
  • 举报
回复
继续关注!cueixu1 (紫之龙) 佩服
cueixu1 2003-12-02
  • 打赏
  • 举报
回复
jiank(一钱不值)
HTTP_REFERER的信息是IE发出去的,至于WIN98的IE到底有没有把HTTP_REFERER消息发出去我就不清楚了。可能是IE版本太低的缘故???
cueixu1 2003-12-02
  • 打赏
  • 举报
回复
xxrl(孔曰成仁,孟曰取E)
我对这个东西也不是太专业的了解
如果你有相关比较专业的资料
希望能发出来让大家研究
luoluonet 2003-12-01
  • 打赏
  • 举报
回复
good !

Thanks a lot!
clon 2003-12-01
  • 打赏
  • 举报
回复
谢谢
songqzs 2003-12-01
  • 打赏
  • 举报
回复
看过一篇文章,用session储存编号,然后使用application来存储大量数据。按照大笨狼的说法就是每个人发你一把钥匙,但所有的箱子打开后都通往一个大浴池!
alan815 2003-12-01
  • 打赏
  • 举报
回复
写得不错,呵呵,这样的文章还有点看头儿。
最近在ASP版中很少能看到这种文章了,顶一下。
我也发一个,一会儿^_^
Rex_love_Burger 2003-12-01
  • 打赏
  • 举报
回复
大家确实该多研究一下网络安全方面的问题!
iinohk 2003-12-01
  • 打赏
  • 举报
回复
想問一下樓主
sesssion variables是存在客戶端還是伺服器端?
看過上文,我的理解是存在伺服器端
但session使用太多,客戶端使用中的browser的性能會明顯下降,但其他的卻沒有出現這種情況,如果session是存在伺服器的話,應該不會發生這種情況才對
aocool 2003-12-01
  • 打赏
  • 举报
回复
有时间再看
KUMOZAKI 2003-12-01
  • 打赏
  • 举报
回复
superdullwolf(超级大色狼)的理解也好独到啊! (*^_^*)
TobyLee 2003-12-01
  • 打赏
  • 举报
回复
不错不错
folder 2003-12-01
  • 打赏
  • 举报
回复
不错我正是对SESSION、COOKIES在矛盾着呢,可以仔细想想!
加载更多回复(28)

28,408

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧