1

私は、c# と MSSQL DB を使用して ASP.NET でアプリケーションに取り組んでいます。セッション変数に適切な値が含まれている場合はページが開き、それ以外の場合はログイン ページにリダイレクトされるという単純なロジックを使用しています。これは機能するコードです。

protected void Page_Load(object sender, EventArgs e)
        {
            if(Session["loggedinloginid"]==null || Session["loggedinpassword"]==null)
                Response.Redirect("login.aspx");

            con.ConnectionString = ConfigurationManager.ConnectionStrings["familyConnectionString"].ConnectionString;
            con.Open();
            adp = new SqlDataAdapter("select * from admins where loginid=N'" + Session["loggedinloginid"].ToString() + "' AND password=N'" + Session["loggedinpassword"].ToString() + "'", con);
            dt = new DataTable();
            adp.Fill(dt);

            if (dt.Rows.Count == 0)
                Response.Redirect("login.aspx");

            LinkButton lb=(LinkButton)(Master.FindControl("LinkButton1"));
            lb.Text = "Welcome " + Session["loggedinloginid"].ToString()+"| Log Out |";
            lb.Click += new EventHandler(lb_Click);
        }

        void lb_Click(object sender, EventArgs e)
        {
            Session.Clear();
            Response.RedirectPermanent("WebForm2.aspx");
            //throw new NotImplementedException();
        }

問題は、ログアウトしてセッションをクリアし、保護したいページ (このコードを含むページ) の URL をブラウザーに入力すると、それが開くことです! なぜ、どうすればこれを回避できますか?

4

4 に答える 4

1
  Session.Abandon();

セッションに保存されているすべてのオブジェクトを削除します。Abandon メソッドを明示的に呼び出さない場合、サーバーはこれらのオブジェクトを削除し、セッションがタイムアウトしたときにセッションを破棄します。

クリアと放棄の違いについては、このリンクを参照してください

Session.Abandon() と Session.Clear() の違いは何ですか

于 2012-12-29T09:33:33.747 に答える
0

あなたの問題はこの行にあります:

   lb.Click += new EventHandler(lb_Click);

OnLoad-Event で EventHandler をサブスクライブしているため、Click-EventHandler のコードが呼び出されることはありませんが、ライフサイクルでは遅すぎます。行を OnInit-Event に移動すると、コードが期待どおりに動作するはずです。

また、SQL インジェクションを防ぐために SQL クエリをサナタイズすることも検討する必要があります (ログインがどのように見えるかはわかりませんが、上記のコードに基づいて、SQL インジェクションに対して脆弱である可能性があります)。

.net 3.5以降がオプションである場合は、Linq2SQlやEntityFrameworkなどの単純なORM-Mappersを確認することをお勧めします(最初にLinq2SQLを見てください)。これにより、クエリにLINQを使用して(おそらく)サナタイズできますあなたの入力。

于 2013-01-05T09:58:54.030 に答える
0

Session.Remove() メソッドを使用できます。

Session.Remove("セッション名");

于 2012-12-29T09:24:03.547 に答える
0

そのページのリダイレクトが「WebForm2.aspx」に完了した後、セッションを削除します。その「Webform3.aspx」ページにセッション削除関数を記述します。ログインページにリダイレクトした後。また、webconfig ファイルも確認します。

于 2012-12-29T10:45:07.930 に答える