从http和https版本共享会话变量

时间:2010-03-22 14:06:51

标签: asp.net http session https

我正在尝试修复一个朋友从旧技术转换的ASP.NET网站。对于用户,该站点似乎具有公共和安全部分。在幕后,公共和私有站点是具有单独应用程序池的独立Web应用程序。出现困难是因为看起来应用程序共享相同的会话ID(从公共页面到安全页面时,会话ID保持不变),但(InProc)会话变量的 none 是从公共站点传递到私人站点。

基本上,工作流程包括用户在公共站点上检查复选框(“我同意”类型的东西)(让我们调用该页面http://www.boring.gov/iAgree.aspx),然后登录安全站点(让我们称之为第https://www.boring.gov/login.aspx页)。来自DC的母代理机构的诫命是用户可能没有为登录页面添加书签,用户每次登录时都必须点击“我同意”,并且“我同意”的内容必须在单独的页面上。

我错过了什么?

你会怎么做?

注意:
1 - 这将托管在单个Windows 2003服务器上 2 - 是的,它是一个政府机构 3 - 如果我正在进行转换,我会做的事情会有所不同,但是直到大便击中风扇才被带进来,重做的事情为时已晚。
4 - 两个似乎相关但尚未应用的SO线程是thisthat

4 个答案:

答案 0 :(得分:2)

在当前场景中,您无法在proc会话变量中使用相同的内容。由于这两个站点是不同的应用程序,因此无法共享内存信息。

我会尝试将您需要的信息序列化到数据库中,以便两个应用程序都可以检索变量。

答案 1 :(得分:2)

您需要在Web配置文件中使用计算机密钥,并且两个应用程序中的匹配需要相同。当请求会话信息时,此机器密钥将使其获取相同的数据。我们在负载平衡场景中使用它,其中应用程序需要获得相同的会话信息,而不管哪个服务器响应用户请求。

典型的密钥可能如下所示。

<machineKey     validationKey='A130E240DF1C49E2764EF8A86CEDCBB11274E5298A130CA08B90EED016C0 
14CEAE1D86344C29E67E99DF83347E43820050A2B9C9FC89E0574BF3394B6D0401A9' 
decryptionKey='2CC37FFA8D14925B9CBCC0E3B1506F35066FEF33FEB4ADC8' validation='SHA1'/>

查看this了解详情。

答案 2 :(得分:1)

不确定您希望在两个版本之间共享什么类型的内容。如果你想分享不可变的信息,比如用户名,用户ID ......你只需要从HTTPS重定向(或POST)到HTTP版本,并将这些变量发送给这个请求(以URL或HTTP形式)(*)。如果你的东西一直在变化,你应该将这些变量序列化到一个持久区域(文件或数据库)。

(*)如果这些内容是敏感的,请改用服务器端请求。接收器支持“Web服务”(基于Restful的HTTP GET / POST,而非SOAP I),供另一个(调用者)更新其变量。当然,我们应该只限制来自localhost的调用者。

答案 3 :(得分:1)

您可以通过在第一页的提交按钮上设置PostBackURL属性,然后在下一页上迭代Request.Form集合,将数据发布到SSL页面。

http://msdn.microsoft.com/en-us/library/6c3yckfw.aspx