这是我的情景:
我有以下几页:
第1页,第2页和第3页是母版页“ABC.Master”的子页面。
页面流程:
注意:它应该纯粹像银行网站。即)单击浏览器返回 按钮会话必须过期。
答案 0 :(得分:4)
这已成为一段时间的问题。大多数人都用它来解决它:
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(Now.AddSeconds(-1));
Response.Cache.SetNoStore();
}
此代码段基本上指示所关注的页面在发布后立即过期,并将页面设置为不缓存其内容。
但是,某些浏览器可能会忽略页面缓存设置,而某些用户可能仍会多次提交表单。
解决方法:
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(Now.AddSeconds(-1));
Response.Cache.SetNoStore();
if (Page.IsPostBack){
if (isPageExpired()){
Response.Redirect("expired.htm");
}
else {
Session("TimeStamp") = Now.ToString;
ViewState("TimeStamp") = Now.ToString;
}
}
}
private boolean isPageExpired()
{
if (Session("TimeStamp") == null || ViewState("TimeStamp") == null)
return false;
else if (Session("TimeStamp") == ViewState("TimeStamp"))
return true;
else
return false;
}
基本上,无论何时加载页面,它都会通过调用isPageExpired函数来检查它是否是重新提交的页面。如果函数返回true,则将页面重定向到页面过期响应;如果没有,它设置两个时间戳:一个保存在会话状态,另一个视图状态。
isPageExpired函数比较会话状态中保存的时间戳和viewstate中的时间戳。如果它们不同,则用户已从缓存中提交表单;然后,页面将它们引导到Page-expired响应。