会话[]保留数据多长时间?

时间:2012-10-29 10:11:27

标签: asp.net session session-variables

我正在尝试使用会话,但是当我需要将值返回null时?

我的网站以登录开始,我将用户名放入会话。

Session["userName"] = login.UserName;

然后将网站重定向到新页面。

return RedirectToAction("Choice", new { token = token });

之后,我使用链接转到我的下一页。

@Html.ActionLink("Download", "Download", new {token = Model.Token})

我将我的代码指向家庭控制器中的操作结果,同一个控制器我有登录功能。

@Html.ActionLink("Download", "DownloadFile", new { fileid = item.Key, token = Model.Token, platform = "windows", filename = item.Value }, new {@class = "DownloadLink" } )

我尝试再次调用会话值。

formMobiApi.GetFile(token, fileid, platform, filename, Session["userName"].ToString(), tasks, taskId, spreadSheetStatus);

是否有任何操作可以使我的会话值为空?

我可以使用这样的会话吗?

2 个答案:

答案 0 :(得分:9)

如果您未在web.config中手动设置会话状态,则的默认值在进程中(会话存储在Web服务器的RAM中),超时为20分钟 - see here for more information on session states

您可以使用以下方法在web.config文件中手动设置状态:

<configuration>
    <system.web>
        <sessionState mode="InProc" timeout="20"></sessionState>
    </system.web>
</configuration>

现在,关于你的实际问题。我不确定为什么你的会话不会持续存在而我无法找到,因为我没有你的代码副本来调试。我猜你的HttpContext与初始化会话,到你请求它的时间不同,因此你的上下文密钥不同。尝试更改

Session["userName"].ToString();

HttpContext.Current.Session["userName"].ToString();

乍一看这看起来有点奇怪,因为你有效地做了同样的事情。不同之处在于,如果当前对象无法访问HttpContext,则需要明确定义要读取的上下文。

再看看你提供的代码,没有什么不寻常的 - 这应该有效。我真的开始相信这是一个环境/配置问题。如果您使用表单身份验证,请检查web.config文件中的超时。此外,如果您在IIS中托管(而不是Visual Studio的Web服务器 - 尽管您也应该检查它!)尝试删除您的应用程序池并重新创建它。

答案 1 :(得分:0)

您的会话变量已正确设置,并且已被正确调用以获取该值。

要调试的唯一一件事就是实际查看 login.UserName 是否具有实际值。因为您可能只是将会话变量设置为null( login.UserName )。

如果这不起作用,还尝试将其添加到您的web.config文件中。

<sessionState mode="InProc" timeout="20" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
      </providers>
</sessionState>