我想检查用户是否已登录,如果是,则拒绝他们访问注册和登录页面。当用户登录时,我正在设置这些会话变量:
HttpContext.Current.Session["LoggedIn"] = true;
HttpContext.Current.Session["FullName"] = (string)Reader["FirstName"] + " " + (string)Reader["LastName"];
Response.Redirect("Default.aspx");
我在寄存器的顶部检查它们并登录页面如下:
if ((bool)HttpContext.Current.Session["LoggedIn"])
{
Response.Redirect("Default.aspx");
}
但是,当我尝试在未登录时访问该页面时,会抛出此异常:
对象引用未设置为对象的实例。
我假设它是因为LoggedIn
密钥不存在,因为我只是在成功登录后才创建它。
那么,我如何检查LoggedIn
密钥是否存在,如果不存在,则将用户重定向到Default.aspx
?
谢谢!
答案 0 :(得分:2)
我认为你可以对此进行简单的空检查....
if (HttpContext.Current.Session["LoggedIn"] != null)
{
// once inside this loop
// you can now read the value from Session["LoggedIn"]
Response.Redirect("Default.aspx");
}
答案 1 :(得分:2)
在取消装箱之前,您需要确保该对象不为空
if(HttpContext.Current.Session["LoggedIn"]!=null)
{
if ((bool)HttpContext.Current.Session["LoggedIn"])
{
Response.Redirect("Default.aspx");
}
}
答案 2 :(得分:0)
为什么要完全避免使用默认的webforms身份验证模型?只需使用web.config定义一个受限区域,正确设置所有设置,就不必为每个页面执行这样的检查。
但是,如果你想重新发明轮子...... 你检查一些可能还不存在的东西。您必须修改if语句,如下所示:
bool isLoggedIn = (HttpContext.Current.Session["LoggedIn"] == null ? false : (bool)HttpContenxt.Current.Session["LoggedIn"];
if (isLoggedIn)
{
Response.Redirect("Default.aspx");
}