2010-09-28 157 views
3

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

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

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

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

  3. 生成新的machineKey并加入它无论是网站和虚拟目录...

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

  4. 创建一个新的应用程序池,并确保这两个网站和它的虚拟目录都使用相同的应用程序池。

如果我写出来的会话ID <%= Session.SessionId%>它是进出虚拟目录(它是整个网站相同)的网页一样。我只是无法获得该会话变量!有谁知道还有什么我可以尝试让这个工作?

谢谢。

回答

1

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

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

Passing session data between ASP.NET Applications

+0

我想过设置一个cookie而不是一个会话变量,因为它都在同一个域名下,但它似乎应该有一个解决方案。我认为会话状态会起作用......为什么它对服务器场而言不起作用,而不是虚拟目录? – Craig 2010-09-29 19:55:59

+0

@Craig - 我从来没有与服务器农场合作过,但我认为答案仍然是应用程序(virtural目录)相同,只是位于不同的服务器上。 – DaveB 2010-09-29 23:45:56

0

从一切我可以说,这是不可能做我想做的事。更糟糕的是,我决定使用cookies而不是会话变量,认为由于Cookie是由客户端创建和维护的,并且基于域,所以这是行得通的。不幸的是,用C#/ ASP.NET创建的cookie甚至不能共享。所以我不得不使用C#来插入Javascript来创建cookie,以便我可以做我想做的事情。最终结果是一个简单问题(恕我直言)的简单解决方案。

+1

Cookie可以通过设置machineKey来共享 – 2013-03-31 18:41:22