我有以下代码来检查查询字符串是否未更改:
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键或按下我的按钮,则会将其重定向到错误页面。
但是,我的代码失败了。有人可以帮忙吗?谢谢:))
答案 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中有错误将会抛出。
我希望能帮到你。