HTTP和HTTPS之间的经典ASP会话怪异

joh*_*hna 4 iis-7 asp-classic

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

项目以HTTP格式添加到购物车中,当用户签出时,它们将被带到HTTPS.此时没有问题,HTTPS结帐页面正确获取会话值.

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

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

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

如果他们返回HTTP购物车页面,则会显示不同的项目.

总而言之,我第一次从HTTP转换到HTTPS时工作正常,但之后就像有两个独立的Sessions.

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>
Run Code Online (Sandbox Code Playgroud)

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

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

Lan*_*art 6

更新

实际上这些设置是相同的,当我通过IIS中的GUI执行它更新而applicationHost.config不是web.config文件,也许这是区别?该applicationHost.config可以发现%SystemRoot%\System32\inetsrv\config.

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

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

安全连接上的新ID