【问题标题】:What's wrong with this ASP.Net Configuration, as it relates to Sessions?这个 ASP.Net 配置有什么问题,因为它与会话有关?
【发布时间】:2011-03-01 18:40:01
【问题描述】:

这可能是一个显而易见的解决方案,但我已经碰壁了一段时间了,只需要第二双眼睛来指出我做错了什么。

我有一个新的 ASP.Net MVC 项目,在 web.config 中有以下(相关)信息:

 <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

【问题讨论】:

  • 没有直接回答您的问题,但您为什么要这样做而不是使用 MembershipProvider(ootb 或自定义)?
  • 你能把验证的代码贴出来吗?
  • @Paul - 我没有任何类型的角色,也没有保留任何与用户相关的真实细节,除了基本的身份/身份验证信息,所以我不希望处理的混乱一个 MembershipProvider 。

标签: asp.net session session-state session-timeout


【解决方案1】:

我觉得一切都很好。

您在项目中的任何地方都接到过Session.End() 的电话吗?如果是这样,也许在它上面放一个断点,看看它是否被意外调用。

【讨论】:

  • 不,目前没有明确的代码来销毁会话。
【解决方案2】:

看起来这与我使用 DotNetOpenAuth 的方式有关。

我仍然无法弄清楚为什么在收到身份验证响应时调用 Session_End(我怀疑这可能是设计使然),但我已经设法通过持久化会话值来实现解决方法我需要(用户 ID 等)到 cookie,然后在下次调用 Session_Start 时从 cookie 重建会话。

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    相关资源
    最近更新 更多