检查用户是否使用会话登录

时间:2012-11-14 17:05:38

标签: c# asp.net session

我想检查用户是否已登录,如果是,则拒绝他们访问注册和登录页面。当用户登录时,我正在设置这些会话变量:

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

谢谢!

3 个答案:

答案 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");
}