如何防止用户重复提交数据

作者:袖梨 2022-06-30
这篇文章从语法上看,原作者应该是从什么地方翻译过来的。
简单的解决方案:
最简单的方式就是当用户提交之后,在你的服务器端控件的代码中使用Response.Redirect("selfPage")语句。但是大多的数包括我都不使用这种方法。
多次提交:
请注意:这篇文章并不是有关如何防止在一个页面中多次提交。这篇文章是教你在提交了请求之后如何防止页面进行刷新。情况是这样的,当用户提交了按钮之后,最终用户就不能再点击提交按钮了。但是这样最终用户仍然可以通过点击浏览器的刷新按钮来提交数据。如果要防止多次提交你可以去 http://metabuilders.com/网上找一些资料,它那里有一个提交控件可以用。
常规的解决方案
习惯的解决方法是存储Session的ID和当提交时ViewState中存储的SessionID相比较来防止用户刷新屏屏幕。前提你的程序中允许了自动回发,如果不是的话,就得在hidden field存储这个变量了。下面给出一个典型的例子。在Page_Load事件中你存储了第一次提交时的SessionID和一个时间戳。
protected System.Web.UI.WebControls.Button SubmitButton;
protected System.Web.UI.WebControls.Label RefreshID;
private void Page_Load(object sender, System.EventArgs e)
{
if (RefreshID.Text.Length == 0)
{
RefreshID.Text = Session.SessionID+DateTime.Now.Ticks.ToString();
}
}

private void Button1_Click(object sender, System.EventArgs e)
{
string sesToken = (string) Session[FrameworkConst.SYNC_CONTROL_KEYWORD]; string pageToken = RefreshID.Text;
if (sesToken != null && sesToken != pageToken)
{
Response.Write("The Refresh was performed after submit.");
}
else
{
// do your processing here to avoid Refresh trap
Response.Write("The processing is done here. Disabling submit
button so that user can not perform multiple submit.");
Response.Write("But still user can peform Refresh on page.");
}
Session[FrameworkConst.SYNC_CONTROL_KEYWORD] = Session.SessionID+DateTime.Now.Ticks.ToString();

相关文章

精彩推荐