使用AJAX和标准HTML POST请求时,多个经典ASP SessionID

时间:2009-02-17 17:00:07

标签: ajax session asp-classic vbscript

我正在使用经典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?

2 个答案:

答案 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。