我正在使用经典ASP和一些AJAX将表单的内容发布回AJAX表单所在的页面。在AJAX POST后,页面将其中一个字段(特定于电子邮件)保存到Session变量中。然后,用户开始他们的业务 - 可能通过普通HTTP再次请求页面。
然而,这使我的浏览器(Firefox 3.0.6)带有两个ASPSESSIONxxxx cookie - 我假设一个用于AJAX请求,一个用于标准HTTP调用。
这会导致页面(依赖于Session var)从已创建的两个中随机选择一个ASP会话ID - 一个具有Session var set而另一个没有。
我以前在PHP和Flash中处理过这个问题,你可以在PHP中设置会话ID,但不能在ASP中设置。
是否有任何特定于ASP的方法来抵消这种行为 - 或者我应该放弃并使用Cookie?
答案 0 :(得分:0)
我认为这里可能会有其他事情发生。
我把一个快速的例子拼凑在一起,我认为你正在做你正在描述的事情,而且会话似乎在表现。
<%@ LANGUAGE=VBSCRIPT %>
<% if Request.Form("curid") = "" then %>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
<script type="text/javascript">
Event.observe(window, 'load', function() {
Event.observe($('sessiontest'), 'click', function(event) {
Event.stop(event);
new Ajax.Request( 'test.asp', {
method: 'POST',
parameters: {'curid': $('curid').value},
onSuccess: function(response) {
window.location = 'test.asp';
},
onFailure: function() {
alert('FAIL!');
}
});
});
});
</script>
</head>
<body>
<p><input type="text" id="curid" value="<%=Session("curid")%>" /></p>
<p><a href="#" id="sessiontest">Save ID to Session</a></p>
</body>
</html>
<%
else
Session("curid") = Request.Form("curid")
Response.write "I was called via POST"
end if
%>
我也是Windows w / FF 3.0.6。
答案 1 :(得分:0)
钟,
我很确定,(虽然我没有确认)双重asp会话是分配给同一服务器上多个虚拟主机的工作进程(应用程序池)的结果。在您的环境中是否有这种情况?
我偶然发现了这个页面,因为我准备好调试和部署经典的asp ajax实现,而这是我想要调查之前的一个问题。
默认的ASP会话行为在各代Windows服务器中都发生了变化(但不确定它在IIS的XP / Vista实现中的工作原理)。
我的帖子有点过了两个月了,你有没有解决这个问题?并且好奇您正在测试/使用的服务器环境/ IIS。