我有一个用经典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不再有效。
答案 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。