检查查询字符串是否未更改

时间:2013-07-02 14:19:00

标签: c# asp.net string

我有以下代码来检查查询字符串是否未更改:

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

现在,问题是两个:

1)如果我更改了URL中的查询字符串并单击该按钮,则不会将用户重定向到错误页面。

2)如果我更改了URL中的查询字符串并在地址栏中按Enter键,则不会将用户重定向到错误页面。

我最想要的是,当用户被重定向到网页时,它会将查询字符串保存到会话中。如果用户更改地址栏中查询字符串的值,并按下地址栏中的Enter键或按下我的按钮,则会将其重定向到错误页面。

但是,我的代码失败了。有人可以帮忙吗?谢谢:))

2 个答案:

答案 0 :(得分: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值的问题。

答案 1 :(得分:1)

我认为你的问题是,Response.Redirect需要false在句子的最后一句Response.Redirect("CheckOutErrorPage.htm", false);,因为你在try cath中有错误将会抛出。

我希望能帮到你。