北极牛

路上的人
随笔 - 5, 文章 - 4, 评论 - 3, 引用 - 0
数据加载中……

session 和cookie的区别

对 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

那么就在看看 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 哦:)。

posted on 2006-07-13 12:13 北极牛 阅读(121) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问