我创建了一个使用ASP.NET 2.0的网站,我正在使用会话变量来确定用户是否填写了年龄验证表单。一切都按预期工作(我可以在所有页面上读取会话变量),直到用户转到虚拟目录。当他们这样做时,页面无法读取会话变量。
经过大量研究,我到目前为止做了以下工作。
在我的web.config文件中添加了一个sessionState节点,将模式更改为StateServer(用于网站和虚拟目录)。
<的sessionState 模式= “的StateServer” Cookie的=“假” 超时= “20” stateConnectionString这一= “TCPIP = 127.0.0.1:42424” />
生成一个新的machineKey并将其添加到站点和虚拟目录中......
<的machineKey
的validationKey = “... 128 ...”
decryptionKey = “... 64 ...”
验证= “SHA1”
解密= “AES”
/>
创建了一个新的应用程序池,并确保该网站及其虚拟目录都使用相同的应用程序池。
如果我写出会话ID<%= Session.SessionId%>在进出虚拟目录的页面上是一样的(整个站点都是一样的)。我只是无法得到那个会话变量!有谁知道还有什么我可以尝试让它工作?
感谢。
答案 0 :(得分:1)
不同的虚拟目录=不同的应用程序和应用程序不共享它们之间的会话数据。也许重新设计你的应用程序以避免这种情况?
这是在ASP.NET应用程序之间共享会话数据的可能解决方案。
答案 1 :(得分:0)
从我能说的一切来看,我不可能做我想做的事。更糟糕的是,我决定使用cookie而不是会话变量,认为由于cookie是由客户端创建和维护的,并且基于域,这将起作用。不幸的是,不知何故,当使用C#/ ASP.NET创建时,甚至无法共享cookie。所以我不得不使用C#插入Javascript来创建cookie,这样我就可以做我想做的事情。最终结果是应该是一个简单问题(恕我直言)的一个不优雅的解决方案。