session - 经典 ASP : Multiple ASPSESSIONID in cookies

标签 session iis cookies asp-classic iis-6

我在使用经典的 asp 页面时遇到了问题,并且 3 天以来一直无法解决它。

该页面正在使用 session - 有时会发生 ASPSESSIONID cookie 在 Request.ServerVariables("HTTP_COOKIE") 中设置两次的情况。这会导致 ASP-Page 在页面刷新时在两个 Session 之间跳转。

我编写了一个测试页面,它输出当前的 SessionId、服务器软件和 HTTP_COOKIE 值。

示例输出:

<小时/>

session ID:308542840

session 超时:20 分钟

服务器软件:Microsoft-IIS/6.0

HTTP_COOKIE:ASPSESSIONIDQCBATRAD=MBHHDGCBGGBJBMAEGLDAJLGF; ASPSESSIONIDQCCDTTCB=PGHPDGCBPLKALGGKIPOFIGDM

<小时/>

为什么有两个 ASPSESSIONID? 当我刷新页面时,它会随机输出两个 session ID 之一。

以下截屏视频显示了 IE9 中的问题: http://prinz-alexander.at/asp_test.avi

此错误经常出现在ie8和ie9中。

只需执行以下操作即可重现问题:

  1. 完全关闭 IE8 或 IE9
  2. 启动 IE8 或 IE9 并打开 http://www.pfiffikus.at/pfiffikus/tests/
  3. 页面加载后立即刷新页面多次

如果重复此步骤,则 HTTP_COOKIE 会随机(并非总是)填充两个不同的 ASPSESSIONID。

asp 测试文件仅输出提到的值,源代码中没有发生任何其他事情。

这是asp测试文件的代码:

<% If trim(Session("test_val")) = "" Then
     Dim my_num
     Randomize
     number = Int((rnd*1000))+1
     Session("test_val") = number
   End If
%>

<b>Session ID:</b>
<% response.write(Session.SessionId) %><br /><br />

<b>Session("test_val"):</b>
<% response.write(Session("test_val")) %><br /><br />

<b>Session Timeout:</b>
<% response.write(Session.Timeout) %> minutes<br /><br />

<b>Server Software:</b>
<% response.write(Request.ServerVariables("SERVER_SOFTWARE")) %><br /> <br />

<b>HTTP_COOKIE:</b> <% response.write(Request.ServerVariables("HTTP_COOKIE")) %>

如何避免 cookie 中存在多个 ASPSESSIONId?

感谢您的帮助!

最佳答案

我能够使用 Javascript 删除这些 cookie。

只需将下一个脚本添加到登录页面的末尾即可。 这将在用户登录网站之前删除所有“ASPSESSIONIDXXXXXXX”cookie:

<script type="text/javascript">
    //Clear any session cookies
    (function(){
        var cookiesArr = document.cookie.split("; ");
        for (var i = 0; i < cookiesArr.length; i++) {
            var cItem = cookiesArr[i].split("=");
            if (cItem.length > 0 && cItem[0].indexOf("ASPSESSIONID") == 0) {
                deleteCookie(cItem[0]);
            }
        }

        function deleteCookie(name) {
            var expDate = new Date();
            expDate.setTime(expDate.getTime() - 86400000); //-1 day
            var value = "; expires=" + expDate.toGMTString() + ";path=/";
            document.cookie = name + "=" + value;
        }
    })();
</script>

关于session - 经典 ASP : Multiple ASPSESSIONID in cookies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12783878/

相关文章:

python - asp.net 破解 sessionId 使用 python 脚本被暴力破解的可能性

iis - 启动/停止iis和mssql的powershell脚本代码

iis - Web 配置中缓存组件之间的差异

ruby - 我如何在 capybara 中使用我自己的 cookie?

java - RESTEasy Singleton 中的 CookieParam

java - 如何处理有状态的 OSGi 服务以跨包更新维护 session 状态?

java - session 是如何处理的?

url - 默认文档不显示完整的 url

Android cookie 管理器 - 如何获取所有 cookie

javascript - Socket.io 无法访问与 Express 相同的 session