0

クエリ文字列が変更されていないことを確認する次のコードがあります。

protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                Label_Error.Visible = false;
                string query_string = Request.QueryString["GUID"].ToString();
                Session["GUID"] = query_string;
            }

            else
            {
                string GUID = "";

                try
                {
                    GUID = Session["GUID"].ToString();
                }
                catch (Exception)
                {
                    Session.Abandon();
                    Response.Redirect("CheckOutErrorPage.htm");
                    return;
                }

                if (GUID.Equals(Request.QueryString["GUID"].ToString()) == false)
                {
                    Session.Abandon();
                    Response.Redirect("CheckOutErrorPage.htm");
                }
            }
        }

ここで、ボタンクリック イベント ハンドラーに次のコードを追加して、クエリ文字列の値が (再び) 変更されていないことを確認します。

protected void ImageButton_LogIn_Click(object sender, ImageClickEventArgs e)
        {
            Validation val = new Validation();

            string GUID = "";
            string query_string = "";

            try
            {
                GUID = Session["GUID"].ToString();
                query_string = Request.QueryString["GUID"].ToString();
            }
            catch (Exception)
            {
                Session.Abandon();
                Response.Redirect("CheckOutErrorPage.htm");
                return;
            }

            if (val.EmptyString(GUID) == true || val.checkTransactionGUIDExists(GUID) == false || GUID.Equals(query_string) == false)
            {
                Session.Abandon();
                Response.Redirect("CheckOutErrorPage.htm");
            }

さて、問題は次の 2 つです。

1) URL のクエリ文字列を変更してボタンをクリックすると、ユーザーはエラー ページにリダイレクトされません。

2) URL のクエリ文字列を変更してアドレス バーで Enter キーを押すと、ユーザーはエラー ページにリダイレクトされません。

私が基本的に望んでいるのは、ユーザーが Web ページにリダイレクトされたときに、クエリ文字列をセッションに保存することです。ユーザーがアドレス バーのクエリ文字列の値を変更し、アドレス バーで Enter キーを押すか、マイ ボタンを押すと、エラー ページにリダイレクトされます。

ただし、私のコードは失敗しています。誰でも助けてもらえますか?ありがとう :)

4

2 に答える 2

2

代わりにこれはどうですか?

protected void Page_Load(object sender, EventArgs e)
{
    // Always get the query string no matter how the user go to this page
    string query_string = Request.QueryString["GUID"].ToString();

    // Only store the query string in Session if there is nothing in Session for it
    if(null == Session["GUID"])
    {
        Session["GUID"] = query_string;
    }

    if (!this.IsPostBack)
    {
        Label_Error.Visible = false;
    }

    // Always check to see if the query string value matches what is in Session
    string GUID = "";
    try
    {
        GUID = Session["GUID"].ToString();
    }
    catch (Exception)
    {
        Session.Abandon();
        Response.Redirect("CheckOutErrorPage.htm");
        return;
    }

    if (GUID.Equals(Request.QueryString["GUID"].ToString()) == false)
    {
        Session.Abandon();
        Response.Redirect("CheckOutErrorPage.htm");
    }

これSessionにより、ユーザーがクエリ文字列をアドレス バーに入力して Enter キーを押すと、値が上書きされるという問題が解決されます。

于 2013-07-02T14:44:09.237 に答える
1

あなたの問題は、try cat の中にエラーがスローされるため、文の最後に がResponse.Redirect必要なことだと思います。falseResponse.Redirect("CheckOutErrorPage.htm", false);

お役に立てば幸いです。

于 2013-07-02T14:24:00.653 に答える