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

时间:2014-04-23 23:55:31

标签: iis-7 asp-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>

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

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

1 个答案:

答案 0 :(得分:6)

  

<强>更新

     

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

     

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

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

New ID on Secure Connection