遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

siteFactory 防刷新模块RefreshModule


    一般防刷新都是在服务器端实现的,思路如下
 生成一个随机标签,保存到Session里(或是类似的缓存里),同时把标签发到客户端,通过表单隐藏字段,Cookie等手段.
 用户回发时(提交页面)会对比这2个标签,相同就表示正常提交,不同的话则表示刷新.
 说到这里,想起 <<Asp.net 2.0 高级编程>>里的一个错误,作者在讲解httpmodule时展示了一个防刷新模块,这个模块没考虑多用户的情况,在打开一个浏览器测试时是正确的,但是当你开2个浏览器时就会出错.

  下面是SiteFactory的实现思路
  在客户端页面的post操作时,附加一个隐藏字段,这个值是一个随机生成的32位Guid(貌似没有十六进制的F),
  服务器端维护一个队列,队列里的数据是这些Guid,当客户发出post动作时,会比较提交上来的guid是否存在于队列里,
  如果存在就表示是刷新页面操作,反正就表示正常提交,这个时候会把提交上来的Guid入队,如果队列长度达到设定值,则进行一次出队操作.具体代码看PowerEasy.Web.dll程序集

posted on 2008-02-22 13:22  遗忘海岸  阅读(601)  评论(1编辑  收藏  举报