IIS,会话状态和虚拟目录

时间:2010-09-28 17:14:01

标签: asp.net iis session-state

我创建了一个使用ASP.NET 2.0的网站,我正在使用会话变量来确定用户是否填写了年龄验证表单。一切都按预期工作(我可以在所有页面上读取会话变量),直到用户转到虚拟目录。当他们这样做时,页面无法读取会话变量。

经过大量研究,我到目前为止做了以下工作。

  1. 启用ASP.NET状态服务
  2. 在我的web.config文件中添加了一个sessionState节点,将模式更改为StateServer(用于网站和虚拟目录)。

    <的sessionState   模式= “的StateServer”   Cookie的=“假”   超时= “20”   stateConnectionString这一= “TCPIP = 127.0.0.1:42424” />

  3. 生成一个新的machineKey并将其添加到站点和虚拟目录中......

    <的machineKey
    的validationKey = “... 128 ...”
    decryptionKey = “... 64 ...” 验证= “SHA1” 解密= “AES” />

  4. 创建了一个新的应用程序池,并确保该网站及其虚拟目录都使用相同的应用程序池。

  5. 如果我写出会话ID<%= Session.SessionId%>在进出虚拟目录的页面上是一样的(整个站点都是一样的)。我只是无法得到那个会话变量!有谁知道还有什么我可以尝试让它工作?

    感谢。

2 个答案:

答案 0 :(得分:1)

不同的虚拟目录=不同的应用程序和应用程序不共享它们之间的会话数据。也许重新设计你的应用程序以避免这种情况?

这是在ASP.NET应用程序之间共享会话数据的可能解决方案。

Passing session data between ASP.NET Applications

答案 1 :(得分:0)

从我能说的一切来看,我不可能做我想做的事。更糟糕的是,我决定使用cookie而不是会话变量,认为由于cookie是由客户端创建和维护的,并且基于域,这将起作用。不幸的是,不知何故,当使用C#/ ASP.NET创建时,甚至无法共享cookie。所以我不得不使用C#插入Javascript来创建cookie,这样我就可以做我想做的事情。最终结果是应该是一个简单问题(恕我直言)的一个不优雅的解决方案。