0

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

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

但是,当我在未登录的情况下尝试转到该页面时,会抛出此异常:

你调用的对象是空的。

我假设它是 ebcauseLoggedIn密钥不存在,因为我只在成功登录后创建它。

那么,如何检查LoggedIn密钥是否存在,如果不存在,将用户重定向到Default.aspx

谢谢!

4

3 回答 3

2

我认为你可以对这个做一个简单的空检查......

if (HttpContext.Current.Session["LoggedIn"] != null)
{
   // once inside this loop
   // you can now read the value from Session["LoggedIn"]
   Response.Redirect("Default.aspx");
}
于 2012-11-14T17:08:05.993 回答
2

您需要在拆箱之前确保该对象不为空

if(HttpContext.Current.Session["LoggedIn"]!=null)
{

  if ((bool)HttpContext.Current.Session["LoggedIn"])
   {
    Response.Redirect("Default.aspx");
    }
}
于 2012-11-14T17:08:13.273 回答
0

为什么要完全避免默认的 webforms 身份验证模型?只需使用 web.config 定义一个限制区域,正确设置所有设置,您就不必对每个页面都执行这样的检查。

但是,如果你想重新发明轮子......
你检查一些可能还不存在的东西。您必须像这样修改您的 if 语句:

bool isLoggedIn = (HttpContext.Current.Session["LoggedIn"] == null ? false : (bool)HttpContenxt.Current.Session["LoggedIn"];

if (isLoggedIn)
{
    Response.Redirect("Default.aspx");
}
于 2012-11-14T17:11:15.710 回答