【问题标题】:Classic ASP session weirdness between HTTP and HTTPSHTTP 和 HTTPS 之间的经典 ASP 会话怪异
【发布时间】:2014-06-09 01:22:03
【问题描述】:

我有一个用 Classic ASP 编写的电子商务网站,它使用 Session 来存储购物车内容和其他内容。

商品以 HTTP 的形式添加到购物车,当用户结账时,它们会被带到 HTTPS。此时没有问题,HTTPS 结帐页面正确获取 Session 值。

问题是,如果他们点击返回购物车 (HTTP),Session 就会丢失。

如果他们随后将商品添加到购物车中,则它们会在购物车中正确显示 (HTTP)。

但是当他们再次结帐(HTTPS)时,原始会话中消失之前的项目又回来了。

如果他们返回 HTTP 购物车页面,就会发现不同的商品。

所以总而言之,我第一次从 HTTP 转换到 HTTPS 时它工作正常,但之后就像有两个独立的会话。

HTTP 和 HTTPS 的域名完全相同。

网站托管在共享托管环境中。它是 64 位服务器上的 IIS7。

我尝试过集成和经典的托管管道模式。

在 web.config 中,我为 HTTP 和 HTTPS 设置了相同的会话,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <location path="Default Web Site">
        <system.webServer>
            <asp>
                <session keepSessionIdSecure="false" />
            </asp>
        </system.webServer>

知道如何解决这个问题吗?

更新:查看 HTTP 标头似乎在转到 HTTPS 时会创建第二个 ASP 会话 Cookie。不知道为什么会清除第一个。当返回 HTTP 时,只有原始 cookie,但它在会话中不再有任何值,因此可能已经分配了新 cookie,而之前的 cookie 不再有效。

【问题讨论】:

    标签: iis-7 asp-classic


    【解决方案1】:

    更新

    实际上,当我通过 IIS 中的 GUI 进行操作时,这些设置是等效的,它会更新 applicationHost.config 而不是 web.config 文件,也许这就是区别? applicationHost.config 可以在 %SystemRoot%\System32\inetsrv\config 中找到。

    当您在共享主机环境中工作时,您可能无法访问该环境。我想到的另一件事是您的配置值&lt;location&gt;path 属性设置为Default Web Site。我猜这不会是您的共享主机网站的名称,我会删除 path 属性,以便将配置应用于当前目录。

    对于 ASP,您需要在 IIS 配置中的 ASP 部分下指定 New ID on Secure Connection 等于 False(见图)。默认情况下,ASP 将在安全和不安全连接之间切换时创建一个新的 cookie,将其设置为 False 将在 HTTP 和 HTTPS 之间保持相同的 cookie。

    【讨论】:

    • 抱歉刚刚注意到它们是相同的设置,但过去在 IIS 中更改它一直对我有用。
    • 谢谢。我的托管公司在 IIS 中进行了更改,从而解决了问题。但是如果我删除了位置路径,web.config 可能会起作用。
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 2016-04-15
    • 2011-04-29
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多