会话变量在Visual Studio和Server上表现不同

本文关键字:Server 变量 Visual Studio 会话 | 更新日期: 2023-09-27 18:15:40

我希望某段代码在每个会话中只执行一次,所以如果用户在同一会话中导航到包含该代码的页面,我不希望执行该段。代码位于登录后立即调用的默认页面中,用户可以从其他页面导航到该默认页面。

我的解决方案:

if (Session["MySessionName"] == null && ConditionTwo) //initially MySessionName won't exist so the if condition resolves to true
{
    //Assign Value to MySessionName so the if condition resolves to false next time
    Session["MySessionName"] = "MySessionValue";
    //Do Something
}

My Problem:

这在visual studio上工作得很好,在部署到测试服务器后,这个解决方案似乎并不总是工作。如果我退出并重新登录,条件Session["MySessionName"] == null返回false,代码段将不会被执行。但是,如果我关闭浏览器,重新打开并登录,它就可以正常工作。我已经检查了注销是否做了正确的会话处理,它确实做了。

我也试过了,

HttpContext.Current.Session["MySessionName"] = "MySessionValue"; 
//and 
Session.Add("MysessionName", true);

会话变量在Visual Studio和Server上表现不同

如果您正在使用表单认证,您需要调用FormsAuthentication.SignOut()

另外,在注销时需要调用Context.Session.Abandon()来终止当前会话。

我还确保在放弃会话之前总是显式地从会话状态中清除任何敏感或与用户相关的值。