asp.net - session []保留数据多长时间?

标签 asp.net session session-variables

我正在尝试使用 session ,但是当我需要将值恢复为空时?

我的网站从登录开始,我将用户名放入 session 中。

Session["userName"] = login.UserName;

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

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

在女巫之后,我使用链接移至下一页。

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

当我将代码定向到主 Controller 中的操作结果时,我具有登录功能的同一 Controller 。

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

我尝试再次调用我的 session 值。

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

这些操作是否会导致我的 session 值为空?

我可以使用这样的 session 吗?

最佳答案

如果您没有在 web.config 中手动设置 session 状态,那么您应该的默认值是正在处理的( session 存储在 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>

现在,谈谈您的实际问题。我不太确定为什么您的 session 没有持续存在,而且我无法找到答案,因为我没有要调试的代码副本。据我猜测,您的 HttpContext 与初始化 session 时和请求 session 时不同,因此您的上下文键是不同的。尝试改变

Session["userName"].ToString();

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

乍一看,这看起来有点奇怪,因为您实际上在做完全相同的事情。区别在于,如果当前对象无权访问 HttpContext,您需要显式定义要读取的上下文。

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

关于asp.net - session []保留数据多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119520/

相关文章:

asp.net - 在IIS中,为什么应用程序池中的应用程序总是停止并且IIS服务变得不可用(503)

c# - ASP.NET 2.0 站点中的 ASP.NET 4.0 应用程序能否使用相同的表单例份验证 cookie?

asp.net - 在 ASP.NET 中缓存所有用户

php - CakePHP - 保存一个 session 变量会删除另一个

c# - 运行时的显式运算符转换

ios - 如何将字符串值传递给我应用程序中的所有 ViewController

PHP Javascript?当用户关闭页面或浏览器时做一些事情

c# - 如何在 MVC 4 应用程序中进行单用户登录

php - 如何在PHP中有效防止跨站请求伪造(CSRF)

asp.net - 为什么 HttpContext.Current.Session 在 Global.asax 中为空?