【问题标题】:Asp MVC session lost after RedirectToActionRedirectToAction 后 Asp MVC 会话丢失
【发布时间】:2015-06-08 09:57:34
【问题描述】:

我有一个 MVC4 Web 应用程序,当我在 Visual Studio 中运行它时,它可以在我的本地机器上完美运行。

因此,我将网站发布到服务器以与我的应用程序一起上线。 但是当我尝试登录时,我的应用程序会转到以下代码:

[HttpPost]
public ActionResult CheckLogin(LoginViewModel vm)
{
     if (!String.IsNullOrWhiteSpace(vm.UserName) && !String.IsNullOrWhiteSpace(vm.Password))
     {
           User u = ... 
           // Get user from database with credentials

           System.Web.HttpContext.Current.Session.Add("UserIdSession", u.Id);
           return RedirectToAction("Validate", "Overview");
     }
     else
     {
         // process the error that the login failed
     }
}

重定向到以下操作:

    [HttpGet]
    public ActionResult Validate()
    {
        if (HttpContext.Current.Session["UserIdSession"] != null)
        {
            return View();
        }
        else
        {
             return RedirectToAction("Index", "Login");
        }
    }

但问题是会话变量不存在 它总是让我回到登录屏幕

我发现在设置会话后进行重定向会导致此行为,但我找不到解决此问题的答案...

所以我对此有一些疑问:

  1. 为什么它在我的本地机器上运行而不是在服务器上运行?
  2. 我可以修改服务器设置以按照我的意图工作吗?它会在重定向后回收东西吗?
  3. 我能否像在服务器上一样通过某些设置在本地计算机上重现此行为?
  4. 必须有一个简单的方法来解决这个问题,还是我错了?我真的需要将会话变量存储在数据库或类似的东西中吗?

【问题讨论】:

  • 从来没有用户会话用于身份验证目的......不要这样做。它非常不安全且不可靠(IIS 可以随时终止会话)。 ASP.NET 提供了一种身份验证机制(实际上有几种),使用它们。 MVC4 的 FormsAuthentication。

标签: c# asp.net asp.net-mvc-4 session


【解决方案1】:

您是否有具有负载平衡的集群服务器,如果有,那么您可能希望在其上启用粘性会话,以便来自一个会话的所有请求都发送到同一台服务器。

如果您有服务器集群 答案:

1) 当您将会话存储在内存中时,您要确保所有请求都发送到同一台服务器,否则您会在服务器上收到此错误,但不会在本地出现。

2) 如果您只在服务器上启用粘性会话,此错误可能会消失。

3) 如果错误是由于集群造成的,那么您无法在本地重现它。

4) 如果您无法在负载均衡器上启用粘性会话,那么您可能必须将会话存储到所有集群服务器都可以访问的文件中,或者将其存储在数据库中。

【讨论】:

  • 你回答的第一部分是对OP的一个问题,应该是一个评论。鉴于 OP 没有回答问题,您回答的第二部分是猜测,也应该是评论。只有在问题明确时才回答,否则使用 cmets。
  • @CodeCaster - 虽然我同意提问应该是评论,但您可以根据假设确定答案.. 例如“如果您正在做 xxxx,那么就这样做”,这是一个答案,并且即使它不是这个问题的好答案,它也可能会回答其他人的问题,这些人在搜索过程中发现了这个问题,以及它适用于什么的限定有帮助。
  • @Erik 当然,但是 “为什么我的会话在负载平衡的 IIS 集群上丢失了” 是一个非常具体的问题,已经回答了,这不是吨。我讨厌重复,不喜欢猜测。正确的流程是(除了 OP 自己研究): 1. 评论 “你使用负载平衡吗?你使用哪个会话存储?” 2. OP 的回答:“为什么是的,我愿意!它使用 SQL。” 3. 重复的关闭投票,带有指向 Losing Session State with ASP.NET/SQL Server 的链接。
  • @CodeCaster - 我同意,在一个完美的 q/a 世界中......很多时候,提问者几天都没有回到这个问题......不管怎样,这只是我认为 SO 的工作流程需要重新考虑的原因之一.. 但这是一个不同的论点。
猜你喜欢
  • 1970-01-01
  • 2011-03-09
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
相关资源
最近更新 更多