代码之家  ›  专栏  ›  技术社区  ›  Tangurena

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

  •  2
  • Tangurena  · 技术社区  · 14 年前

    我正试图修复一个asp.net网站,一个朋友把它从旧技术中转化成了一个烂摊子。对用户来说,该站点似乎有公共和安全的部分。在幕后,公共站点和私有站点是独立的web应用程序,具有独立的应用程序池。困难在于应用程序似乎共享相同的会话id(当从公共页转到安全页时,会话id保持不变)。 没有人 (inproc)会话变量中的一个正在从公共站点传递到私有站点。

    基本上,工作流包括用户在公共站点上选中一个复选框(“我同意”类型的内容)(我们称之为该页面 http://www.boring.gov/iAgree.aspx ,然后登录安全站点(我们调用该页 https://www.boring.gov/login.aspx )DC的上级机构的命令是,用户不能在登录页面上加书签,每次登录时必须单击“我同意”,并且“我同意”的内容必须在单独的页面上。

    我错过了什么?

    你会怎么做?

    笔记:
    1-这将托管在单个Windows 2003服务器上。
    是的,这是一个政府机构。
    3-如果我做转换的话,我会做一些非常不同的事情,但是直到大便击中风扇,我才被带进来,现在再做事情已经太晚了。
    4-前两个看起来相关但不适用的so线程是 this that

    4 回复  |  直到 13 年前
        1
  •  2
  •   Middletone    14 年前

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

    典型的钥匙可能是这样的。

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

    退房 this 更多信息。

        2
  •  2
  •   kemiller2002    14 年前

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

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

        3
  •  1
  •   instcode    14 年前

    不知道你想在两个版本之间共享什么样的东西。如果你想共享不可变的信息,如用户名,用户ID…您只需要将https重定向(或post)到http版本,并将这些变量发送一个长的请求(以url或http形式)即可(*)。如果你的资料一直在变化,你应该把这些变量序列化到一个持久的区域(文件或数据库)。

    (*)如果这些内容是敏感的,请使用服务器端请求。接收方支持一个“web服务”(一个基于restful的http get/post,我的意思是不是soap)供另一方(调用者)更新其变量。当然,我们应该只限制本地主机的调用方。

        4
  •  1
  •   Kosta    13 年前

    通过在第一页的submit按钮上设置postbackurl属性,然后在下一页迭代request.form集合,可以将数据发布到ssl页。

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