这可能是一个明显的解决方案,但我现在已经打了一段时间了,只需要第二眼就能指出我做错了什么。
我在web.config中有一个新的ASP.Net MVC项目,其中包含以下(相关)信息:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/User/Login" name="TestProjectSession" timeout="30" />
</authentication>
<sessionState mode="InProc" cookieless="false" timeout="30" />
</system.web>
我正在尝试做的所有事情(现在,因为这已经破了),是在一个页面上为会话写一个值并在另一个页面上检索它...
相关代码:
的Global.asax.cs
protected void Session_Start()
{ Session.Add("UserID", ""); }
身份验证操作(检索用户信息后):
Session["UserID"] = "useridgoeshere";
我遇到的问题是在发出身份验证响应后请求任何页面时调用Session_End。我假设这意味着某种程度上我的会话配置无效,但我无法看到基于上述信息的方式。在浏览器上启用了Cookie,我尝试过使用无Cookie会话,以防万一没有任何更改。
有人可以提出关于我可能配置不当的建议吗?
开发环境是VS2010 / C#/ ASP.Net MVC3
答案 0 :(得分:0)
这一切对我来说都很好。
您是否在项目的任何地方接到了Session.End()
的电话?如果是这样,也许可以在其上设置一个断点,看看它是否被意外调用。
答案 1 :(得分:0)
看起来这与我使用DotNetOpenAuth的方式有关。
我仍然无法弄清楚收到身份验证响应时调用Session_End的原因(我怀疑这可能是设计的),但我已设法通过持久化会话值来实现解决方法我需要(UserID等)到cookie,然后在下次调用Session_Start时从cookie重建会话。