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

ただし、ログインしていないときにページに移動しようとすると、次の例外がスローされます。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

LoggedInログインが成功した後にのみキーを作成するため、キーが存在しないことが原因であると想定しています。

では、キーが存在するかどうかを確認し、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

ボックス化を解除する前に、オブジェクトがnullでないことを確認する必要があります

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

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

デフォルトの Web フォーム認証モデルを完全に避けるのはなぜですか? 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 に答える