Asp.net mvc 为什么在控制器内的方法中会话为空

Asp.net mvc 为什么在控制器内的方法中会话为空,asp.net-mvc,session,c#-4.0,session-variables,Asp.net Mvc,Session,C# 4.0,Session Variables,我正在创建一个MVC5应用程序。它获取一个对象数组作为json,然后我将其反序列化,创建一个新对象,然后将该对象存储在会话中。我可以在部分视图中访问会话,它工作正常,但当我单击该页面上的链接时,它会将我指向同一控制器中的方法,我尝试检索会话,但它为空。任何人都知道为什么会这样。 我将其存储在控制器中的一个方法中,如下所示,并返回视图,驱动程序是一个对象 HttpContext.Session["allInfo"] = driver; HttpContext.Session["loggedIn"

我正在创建一个MVC5应用程序。它获取一个对象数组作为json,然后我将其反序列化,创建一个新对象,然后将该对象存储在会话中。我可以在部分视图中访问会话,它工作正常,但当我单击该页面上的链接时,它会将我指向同一控制器中的方法,我尝试检索会话,但它为空。任何人都知道为什么会这样。 我将其存储在控制器中的一个方法中,如下所示,并返回视图,驱动程序是一个对象

HttpContext.Session["allInfo"] = driver;

HttpContext.Session["loggedIn"] = true;
然后我在局部视图中检查它并创建动态链接。在这里我得到loggedIn为真且allInfo不为空之前,它工作正常

@if (HttpContext.Current.Session["loggedIn"] != null)
{
    <li>@Html.ActionLink("Other Links", "Index", "Home")</li>
    <li>@Html.ActionLink("Other Links", "About", "Home")</li>
    <li>@Html.ActionLink("Other Links", "Contact", "Home")</li>

}

首先,您可以直接在控制器中使用会话对象,而不是使用
HttpContext.Session
。我看你的代码没有任何错误。您使用的是哪种会话存储?会话的到期时间是多少?所以在会话中保存后,它将返回客户端的索引页,另一个链接将把它们带到另一个页面,该页面将显示此对象列表。我跳过了索引页面并重定向到对象页面列表,此时会话可以正常工作。但是有几个排序和添加链接将再次尝试检索同一会话,但现在我再次得到NULL。这太奇怪了。你知道吗?有没有可能在这段时间内清除会话?您是否在任何地方使用了
Session.RemoveAll()
Session.discard()
?我哪里都没有。但我确信这样的事情正在发生。在后台,但我不知道在哪里。当我调用一个会话时,它就是会话的一个新实例
driver = (Driver) HttpContext.Session["allInfo"];