Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不注销的情况下检查母版页上的会话null_C#_Asp.net_Webforms - Fatal编程技术网

C# 如何在不注销的情况下检查母版页上的会话null

C# 如何在不注销的情况下检查母版页上的会话null,c#,asp.net,webforms,C#,Asp.net,Webforms,每次加载页面时,我都无法从会话中读取值。我必须检查母版页上的会话值是否为null,因为我需要在登录时显示用户的真实姓名,所以我不能只依赖表单身份验证 我在每次加载页面时也在做同样的事情 if (Session["Nome"] == null) { FormsAuthentication.RedirectToLoginPage(); } 我不确定为什么会这样,或者是因为加载速度慢,但即使我仍然通过了身份验证,我也会被重定向到登录,因此在某个时候会话是空的。我想知道是否有更好的方法在母版页

每次加载页面时,我都无法从会话中读取值。我必须检查母版页上的会话值是否为null,因为我需要在登录时显示用户的真实姓名,所以我不能只依赖表单身份验证

我在每次加载页面时也在做同样的事情

if (Session["Nome"] == null)
{
    FormsAuthentication.RedirectToLoginPage();
}

我不确定为什么会这样,或者是因为加载速度慢,但即使我仍然通过了身份验证,我也会被重定向到登录,因此在某个时候会话是空的。我想知道是否有更好的方法在母版页上显示用户名(而不是用户名),并在变量实际为空时重定向到登录页。

默认情况下,
会话
变量的时间跨度为20分钟,因此,如果您不刷新变量,则在时间跨度过后,它将为空。因此,您必须重置
“Nome”
变量的时间跨度(不建议在一个页面上停留21分钟,因为这会迫使用户在另一次回发后重新登录)或检查

if(!HttpContext.Current.User.Identity.IsAuthenticated)
    FormsAuthentification.RedirectToLoginPage();
var username = HttpContext.Current.User.Identity.Name;

是的,这是可能的,但如果不检查会话变量是否为null,仍然会感觉不安全。我在web配置中将会话超时设置为300分钟,那么为什么不使用第二位呢?它首先检查当前用户是否已登录,如果未登录,则重定向到登录页面。如果他已登录,您可以从
HttpContext
获取用户名,并且您不必使用
Session
这就是问题所在,我不想显示用户名,但是,我从数据库中获取的真实名称在验证登录后存储在会话中。如果用户未经过身份验证,则使用第一部分实际重定向,如果用户未通过身份验证,则从会话变量中获取名称(如果不为空),或者从数据库中获取名称,然后再次设置会话。是的,谢谢,我真是个白痴,我以前没想到这个。我使用一个会话管理器来处理会话变量,每当它为null时,我就会从数据库中再次获取它,在检查用户是否经过身份验证后,我就会这样做,它的工作就像一个符咒