做了一个ASP程序,在首页,客户端脚本用Window.Open方法打开一个新的窗口,调用本目录下的另一个ASP文件,但新窗口的SessionID与原窗口的不一样

A

aizb

Unregistered / Unconfirmed
GUEST, unregistred user!
做了一个ASP程序,在首页,客户端脚本用Window.Open方法打开一个新的窗口,调用本目录下的另一个ASP文件,但新窗口的SessionID与原窗口的不一样?(50分)<br />IE版本是6.0中文版,在有的客户端机器上没有问题,而有的客户端机器上又有问题,客户端IE设置改了又改,全部接受COOKIE试过了,
全部不结受COOKIE也试过了,重新系统也试过了(刚装上的新系统没有安装任体其他东东之前没有问题),而在大部份IE6英文版中没有这个问题!
其中部份测试是全部安装了所有MS的更新(反正昨天MS的Windows更新上已经没有可用更新了).
有没有遇到过同样问题的朋友,有好的解决办法.
 
只是读取session?没重新赋值?
没遇到过这样的情况,,象你这样的应用很多,却没出现过问题,,贴出你部分代码
 
注意session.ab***?忘记了,意思是设置失效时间
试试response.redirect "other.asp" 跳转其他页
 
代码极其简单,相信不是代码问题,因为在有的机子上没有问题,而有的机子上有问题:
哪位大哥把MS的所有补丁包都打上(包括IE6的),试试.
default.asp
<% @Language = "VBScript" %>
<html>
<head>
<script LANGUAGE="javascript">
function cc()
{
alert(<%=Session.SessionID%>);
window.open('b.asp','','');
}
</script>
</head>
<body onload="cc()">
</body>
</html>
b.asp
<% @Language = "VBScript" %>
<html>
<head>
<script LANGUAGE="javascript">
function cc()
{
alert(<%=Session.SessionID%>);
}
</script>
</head>
<body onload="cc()">
</body>
</html>
 
IE会向服务器发送本机的时间
服务器根据这个时间决定session是否过期(30分钟?)
如果客户端的系统时钟和服务器的相差过大,就会发生你见到的现象
还有可能是你的时区设置的不对,因为http中传送的是GMT时间。
 
已经接受xusong168的答案了
:)
 
难道我的问题都这么难回答?我在大富翁问的问题没有一个是解决了的!
很遗憾xusong168的答案是不成立的,我的自己的机上建立了IIS服务器,
在同一台上使用也是一样的问题.
 
请注意源码,default.asp是首页!在首页一条开就弹出第二个窗口,时间应该不超过1秒钟,Session的超时设置不会是1秒吧!
 
你那个“一秒钟”是本地的一秒钟
我说的超时是2台机器之间的时间差
 
我要是遇到这个问题,就用proxy workbench或者sniffer pro看一下
那个http数据包,注意head部分,sessionid和time都在那里头。
 
在同一台机器上也有可能呀
关键是:
IE发给web server的time
和web server发给IE的time
其中一个有问题。
 
不说别的,你的javascript语句有错的地方。
default.asp
改成如下
<html>
<head>
<script LANGUAGE="javascript">
function cc()
{
alert(<%=Session.SessionID%>);
setTimeout("dd()",1000);
}
function dd() {
window.open('b.asp');
}
</script>
</head>
<body onload="cc()">
</body>
</html>
 
to 淡淡的笑:
有点晕,不知道为什么要这样改,为什么必须要等1秒钟才能打开b.asp?
xusong168:这样说该如何处理?如果我把我的电脑的时钟乱,
那不是很多需要Session的网站会出问题?
我觉得好象IIS判断是否超时不是根据客户端传过来的时间吧,
而是从会话开始的时服务器时间开始记时,
在一定的时间内客户端没有请求来判断是否超时吧!
 
在我的机器上没有问题
补丁全部打上的
包括最新的sp3
win2000,ie6
 
<pre>
GET /qqq.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible;
MSIE 5.5;
Windows 98;
Win 9x 4.90)
Host: 192.168.0.1
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Tue, 27 Aug 2002 11:20:48 GMT
Pragma: no-cache
Content-Length: 54
Content-Type: text/html
Expires: Tue, 01 Jan 1980 00:00:00 GMT
Set-Cookie: ASPSESSIONIDGQGGGWDU=IADHGNHBJJDKJABELFMFMEHN;
path=/
Cache-control: no-cache
IsNullFalse<BR>VarType0<BR>IsNumericTrue<BR>False<BR>
GET /qqq.asp HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible;
MSIE 5.5;
Windows 98;
Win 9x 4.90)
Host: 192.168.0.1
Connection: Keep-Alive
Cookie: ASPSESSIONIDGQGGGWDU=IADHGNHBJJDKJABELFMFMEHN
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Tue, 27 Aug 2002 11:26:35 GMT
Pragma: no-cache
Content-Length: 54
Content-Type: text/html
Expires: Tue, 01 Jan 1980 00:00:00 GMT
Cache-control: no-cache
IsNullFalse<BR>VarType0<BR>IsNumericTrue<BR>False<BR>
</pre>
 
这是对同一个url发的2次请求
注意第2次get比第一次get多了一行:Cookie: ASPSESSIONIDGQGGGWDU=IADHGNHBJJDKJABELFMFMEHN
就是说只要不带这一行,web server就会再次分配一个session
Set-Cookie: ASPSESSIONIDGQGGGWDU=IADHGNHBJJDKJABELFMFMEHN;
path=/
反之,就没有Set-Cookie: ASPSESSIONIDGQGGGWDU=IADHGNHBJJDKJABELFMFMEHN;
path=/
 
所以说IE客户端认为session过期,并在发get请求的时候没有发给web server下面那句话
Cookie: ASPSESSIONIDGQGGGWDU=IADHGNHBJJDKJABELFMFMEHN
这就是我对你的问题的初步诊断。
 
请你做个测试,不用window.open,直接在地址栏输入default.asp b.asp这2个url看看session
是否丢失。
另外还可改一下IIS的会话超时选项试试,缺省是20分钟。
 
在没有去掉default.asp的window.open语句的情况下,打开站点首页(http://127.0.0.1或http://127.0.0.1/default.asp),首页显示SessionID和
弹出的b.asp显示的SessionID基本上相差1(因为是本机,没有对用他用户开放).
而在这个时候,如果另外打开一个窗口,在地址栏输入http://127.0.0.1/b.asp,显示的SessionID和刚才首页显示的SessionID是一样的!
而不是和刚才弹出的b.asp的SessionID一样.
如果去掉Default.asp中的Window.Open一句,在两个不同的窗口的地址栏内输入两个地址:http://127.0.0.1和http://127.0.0.1/b.asp,
它们显示的SessionID是一样的.
以上的测试进行前已经将Web站点属性中的连接超时设为900,000,000秒.是在<管理工具>/<Internet服务器管理器>/<默认Web站点>/<属性>/<Web站点>/<连接>/<连接超时>中设置的.
 
顶部