我正在尝试使用 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/