1

ページの読み込み時にカウンターを 0 に初期化する Web ページがあります。ポストバックごとに、セッションに保存されているカウンターは、値が 4 に達するまで 1 ずつ増加します。基本的に、この背後にある考え方は次のとおりです。ユーザーには、ユーザー名と画面に表示される CAPTCHA 画像を入力する機会が 4 回与えられます。ユーザーが 4 回失敗した場合 (カウンターの使用)、ユーザーはエラー ページにリダイレクトされます。

これは私のページ読み込みのコードです:

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        Label_Error.Visible = false;
        Session["Count"] = 0;
    }

    else
    {
        if (Session["Count"] == null)
        {
            Session.Abandon();
                Response.Redirect("CheckOutErrorPage.htm");
        }

        else
        {
            int count = (int)Session["Count"];
            count++;
            Session["Count"] = count;
        }
    }
}

ボタンがクリックされると、count == 4 のチェックが行われます。これでコードは正常に動作します。ユーザーがボタンを 4 回クリックすると、それ以上は許可されません。ユーザーが更新ボタンを押すと、唯一の問題が発生します。実際のところ、ユーザーが更新を押すと、カウンターは 0 に設定され、さらに 4 回試行できます。どうすればこれを防ぐことができますか? ページの更新時にカウンターを 0 に設定したくありません。カウンターの値はそのままにしておきたい。どうすればこれを行うことができますか?

4

1 に答える 1

6

問題は基本的にこのセグメントです。

if (!this.IsPostBack)
{
    Label_Error.Visible = false;
    Session["Count"] = 0;
}

値を自動的に上書きするのではなく、最初にセッション変数が存在するかどうかを確認すると、問題が解決する場合があります。

if (!this.IsPostBack)
{
    Label_Error.Visible = false;
    Session["Count"] = Session["Count"] ?? 0;
}

もちろん、これは、ユーザーが Cookie を消去して新しいセッションを開始しないことを前提としています。

于 2013-07-04T12:57:58.013 に答える