furniture china 2017:让人无法解释的现象(ASP程序)

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 23:01:59
<body background="#e8e8e8">
<%
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</body>
运行这段程序,然后不断刷新此页面
分析一下应该是一个加1计数功能
可是输出结果却让人吃惊!!!
谁能解释,我是百度新手,编程却有一段时间
没有高分,但求好解!!
这位朋友,你先运行下我的程序再回答好吗?
看好,不断刷新页面,看页面输出
我再强调一下,你们先运行一下再说!!
三楼四楼的朋友好搞笑
我不是要这样的结果,我是要这样的程序结果的解释
计数系统我是有的!
五楼的兄弟你运行没?
六楼的兄弟说的没错,可是你知道为什么呢?再具体点,就是因为那个颜色的#号,谁能给我个解释?
七楼兄弟说得有点上路了..谢谢你的参与,本来我想结束,但是我还想听听别人的说法..另外我想得到你补充的答案HOHO....

<body>导致的

<body>导致的

补充:首先声明,偶也解释不了~

这贴越来越有意思了,偶也接着聊几句

测试一下Mouse_ye的代码,发现问题出在<body background="#e8e8e8"> 这一句里,而这一句是有问题的

background是定义背景图片的,不是背景色,这么写背景色根本不显示,针对这一句作如下测试:

测试一:
<body bgcolor="#e8e8e8">
<%
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</body>
这是正确显示背景色的代码,session也可以正常的增加1

测试二:
<div div="#e8e8e8">
<%
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</div>

这是不能显示背景色的代码,我把body分别换成了div,p,input,session也可以正常的增加1,这说明有可能仅对body等极少数的元素代码错误才可能出现这种情况

测试三:
<body topmargin="#e8e8e8">
<%
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</body>

这里属性的设置一定是错误的,不过session却可以正常加1,我又试着用align,leftmargin,alink测试,都没问题,这同样说明,仅有background等少数属性设置错误才可能引起

同理,我又把#直接替换成@,&,*,$试一下,都可以正常加1,说明#也是不能少的

至少目前看来,要出现那种情况,在代码错误的情况下body,background,#,是都不能少的

测试四:

<%
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</body>

我用抓包工具抓了一下
send:

GET /test/1/a.asp HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 1.0.3705)
Host: localhost
Connection: Keep-Alive
Cookie: ASPSESSIONIDCSAABBAA=DPGBDFCAODKAMMMOJIJOHGBO

WSARecv:

HTTP/1.1 200 OK
Date: Fri, 03 Mar 2006 17:28:49 GMT
Server: Microsoft-IIS/6.0
Content-Length: 13
Content-Type: text/html
Cache-control: private

1
</body>

再试一下把<body background="#e8e8e8">加上的情况,
多了一个send和WSARecv,看来是错误代码引起,第二个send里多了一个Referer(为什么会有?): http://localhost/test/1/a.asp
再WSARecv:第一个看来也没什么问题,为1,而第二个WSARecv居然是2,我晕,浏览器显示为1的时候,session已经是2了?

难道是错误代码导致了第二个send,导致session刷新,在response完成以后使WSARecv接收到新的数据?

写了一段代码用抓包工具抓了一下:
<body background="#e8e8e8">
<%
Randomize()
response.write int(100*rnd)
%>
</body>
果然抓到了没在浏览器上显示的第二个伪随机数

过程是大概是这样,不过其中的原理却是百思不得其解,说了这么多废话不过是抛砖引玉,有砖尽管来拍,期待David_Dai兄的结论~

附:看了David_Dai兄其它的贴,果然是上知天文,下晓编程,嘿嘿~

response.write是服务器向客户端返回信息,而你的变量nik的值是每次都加1的,也就是说,每次nik 值增加一次就要从服务器返回一次信息,而nik没有限制,就要一直增加下去,你的页面就要不断刷新,!!我是这样理解的,不知道正不正确!!!

谢谢! 你的问题靠思考得很好!

暂时我还解释不了!

我在IE 中 每刷新一次 Nik 增加 1 ~3
在 MYIE 中 Nik 每次稳定的增加 2

我用netbox 和 babyweb 作服务器还是同样的结果:
IE 中 每刷新一次 Nik 增加 1 ~3
在 MYIE 中 Nik 每次稳定的增加 2

去掉了 background="#e8e8e8" 后就可以稳定的 以 1 为增量变化了,

从表面现象分析来看
其中变化肯定发生在 客户端。

客户端察看这个页面 用到了几个 或者 几次Session

我想是不是 客户段动用了多线程技术,下载网页数据 而造成如此结果?

当然这只是一个 猜想 没有依据 最好调用服务器日志分析一下

这中间具体发生了什么事 我会在一段时间后 来这里补上

我来了!
首先 谢谢!失落的糖果 的 表扬!
同时 我从 糖果兄 这里受到启发!
引用一段 糖果兄的 文字:
=========================
测试一下Mouse_ye的代码,发现问题出在<body background="#e8e8e8"> 这一句里,而这一句是有问题的

background是定义背景图片的,不是背景色,这么写背景色根本不显示,针对这一句作如下测试:

测试一:
<body bgcolor="#e8e8e8">
<%
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</body>
这是正确显示背景色的代码,session也可以正常的增加1

测试二:
<div div="#e8e8e8">
<%
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</div>

这是不能显示背景色的代码,我把body分别换成了div,p,input,session也可以正常的增加1,这说明有可能仅对body等极少数的元素代码错误才可能出现这种情况

测试三:
<body topmargin="#e8e8e8">
<%
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</body>

这里属性的设置一定是错误的,不过session却可以正常加1,我又试着用align,leftmargin,alink测试,都没问题,这同样说明,仅有background等少数属性设置错误才可能引起

同理,我又把#直接替换成@,&,*,$试一下,都可以正常加1,说明#也是不能少的

至少目前看来,要出现那种情况,在代码错误的情况下body,background,#,是都不能少的

测试四:

<%
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</body>

我用抓包工具抓了一下
send:

GET /test/1/a.asp HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 1.0.3705)
Host: localhost
Connection: Keep-Alive
Cookie: ASPSESSIONIDCSAABBAA=DPGBDFCAODKAMMMOJIJOHGBO

WSARecv:

HTTP/1.1 200 OK
Date: Fri, 03 Mar 2006 17:28:49 GMT
Server: Microsoft-IIS/6.0
Content-Length: 13
Content-Type: text/html
Cache-control: private

1
</body>

再试一下把<body background="#e8e8e8">加上的情况,
多了一个send和WSARecv,看来是错误代码引起,第二个send里多了一个Referer(为什么会有?): http://localhost/test/1/a.asp
再WSARecv:第一个看来也没什么问题,为1,而第二个WSARecv居然是2,我晕,浏览器显示为1的时候,session已经是2了?

难道是错误代码导致了第二个send,导致session刷新,在response完成以后使WSARecv接收到新的数据?

写了一段代码用抓包工具抓了一下:
<body background="#e8e8e8">
<%
Randomize()
response.write int(100*rnd)
%>
</body>
果然抓到了没在浏览器上显示的第二个伪随机数
===================
应该说 糖果兄 的思路是正确的 他做了我 没做的测试

对不起最近 工作忙了点不过很快 我就 可以找答答案了!
当然,答案是 我自己 分析的结果
如有不同 还望大家指正!

<body background="#e8e8e8">
<%
if session("nik")="" then session("nik")=0
Session("Nik")=Session("Nik")+1
response.write Session("Nik")
%>
</body>

SESSION是做什么应该知道吧!
你不停刷新相当于一个循环。

应该是会话线程。可能最大只能到3

在我的空间上运行结果和楼主的分析是一样的,是记录了刷新多少次,不是计数功能,因为他并不影响数据库