ASP.NET 使用Session,避免用户F5刷新时重复提交(转)
1.使用Session,避免用户重复提交(F5刷新时)
0.起因
1.实现原理
2.实现方法
3.调试后发现的实现原理
| Session值 | Hidden值 | |
| 第一次页面载入后 | 初试化为A | 初始化为A |
| 第一次提交表单后 | 由A变成B | 由A变成B |
| F5刷新页面时 | 用B去进行比较 | 用A去进行比较 |
| F5刷新页面后 | 初始化为C | 初始化为C |
| 第二次提交表单时 | 用C比较 | 用C比较 |
if(Request.Form.Get("hiddenTestN").Equals(GetToken()))
4.代码
<asp:FileUploadID="FileUploadChange"runat="server"CssClass="col-lg-3"/>
<asp:ButtonID="ButtonUploadChange"runat="server"CausesValidation="false"CssClass="btn btn-primary"OnClick="ButtonUploadChange_Click"Text="上传"ToolTip="仅允许上传.csv文件"/>
<input id="hiddenTest" type="hidden" value="<%=GetToken() %>" name="hiddenTestN"/>
using System.Web.Security;
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if ( Session["Token"]==null )
{
SetToken();
}
}
}
//获得当前Session里保存的标志
public string GetToken()
{
if (Session["Token"] != null)
{
return Session["Token"].ToString();
}
else
{
return string.Empty;
}
}
//生成标志,并保存到Session
private void SetToken()
{
Session.Add("Token", UserMd5(Session.SessionID + DateTime.Now.Ticks.ToString()));
}
//这个函数纯粹是为了让标志稍微短点儿,一堆乱码还特有神秘感,另外,这个UserMd5函数是网上找来的现成儿的
protected string UserMd5(string str1)
{
string cl1 = str1;
string pwd = "";
MD5 md5 = MD5.Create();
// 加密后是一个字节类型的数组
byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));
// 通过使用循环,将字节类型的数组转换为字符串,此字符串 是常规字符格式化所得
for (int i = ; i < s.Length; i++)
{
// 将得到的字符串使用十六进制类型格式。格式后的字符是 小写的字母,如果使用大写(X)则格式后的字符是大写字符
pwd = pwd + s[i].ToString("X");
}
return pwd;
}
protected void ButtonUploadChange_Click(object sender, EventArgs e)
{
if (Request.Form.Get("hiddenTestN").Equals(GetToken()))
{
// 此处写按钮执行的具体代码
SetToken();//别忘了最后要更新Session中的标志
}
else
{
Response.Redirect(Request.RawUrl);//手动给用户刷新页面
}
} }
protected void BtnUpload(object sender, EventArgs e)
{
if (Request.Form.Get("hiddenTestN").Equals(GetToken()))
{
// 此处写按钮执行的具体代码
SetToken();//别忘了最后要更新Session中的标志
}
else
{
Response.Redirect(Request.RawUrl);
}
}
ASP.NET 使用Session,避免用户F5刷新时重复提交(转)的更多相关文章
- asp.net防止刷新时重复提交
前段时间遇到了需要禁用刷新的需求,f5按钮就不说了,简单的js就能把它禁用,但是工具条上的刷新按钮却傻傻干不掉. 如果简单的在刷新时重新加载画面,通过window.location.href=&quo ...
- c#.net防止按F5刷新页面重复提交的方法
在网上购物的过程中,提交完一个页面后,如果此时按f5刷新,则会弹出一个提示:如果继续,则会重新发送提交我们刚才提交的内容,这个问题应该规避掉,不然总是重复提交付款,那可不是件好事. 在c#.net中的 ...
- PHP防止页面刷新、重复提交数据
PHP防止页面刷新.重复提交数据 (2011-12-09 16:52:45) 转载▼ 标签: it 分类: php技术相关 闲来无事看了一下php session ,又在网上看了防止页面刷新重复提交数 ...
- PHP避免刷新页面重复提交
PHP避免刷新页面重复提交 2013-07-09 15:27 匿名 | 浏览 3567 次 编程语言 情景:从html提交数据到x.php 在x.php中$_POST数据写库并且显示,当x.php刷新 ...
- 弹出窗口Session丢失、防止表单重复提交问题
一.弹出窗口Session丢失问题 弹出窗口Session丢失使用window.showModalDialog进行信息的提示,相当方便,也容易控制外观和布局.但是存在一个严重的问题,就是Session ...
- [原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- php止刷新页面重复提交
利用session来解决,首先新建一个session,并赋值,第一次提交后改变session的值,当第二次再此提交此内容时,如果不是我们的赋值,就不在处理传过来的数据.如:<?php sessi ...
- 通过session 怎么防止表单的重复提交!
1.在提交表单的时候使用隐藏域: String tokenValue=new Date().getTime(); <input type="hidden" name=&quo ...
- 解决 php提交表单到当前页面,刷新会重复提交 的问题
http://blog.csdn.net/u012466451/article/details/68952280
随机推荐
- python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框
最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测.于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是: 1.在视 ...
- ES6,数组遍历
ES6提供了entries(),keys(),values()方法返回数组的遍历器,对于遍历器(Iterator)可以使用for...of进行便利,也可是使用entries()返回的遍历器Iterat ...
- UbuntuNFS服务器配置
NFS服务的配置====================1,下载并安装NFS sudo apt-get install nfs-kernel-server 2,配置NFS sudo vi /etc/e ...
- [Python Study Notes] python面试题总结
python语法以及其他基础部分 可变与不可变类型: 浅拷贝与深拷贝的实现方式.区别:deepcopy如果你来设计,如何实现: __new__() 与 __init__()的区别: 你知道几种设计模式 ...
- filezilla server客户端FTP连接不上解决
windows服务器上安装Filezilla server后,本地客户端连接不上.解决办法: 1.在防火墙把filezilla的 Filazilla server interface.exe 和Fil ...
- angular+require前端项目架构搭建
app //应用入口 directive //自定义指令 require-main //require的主配置文件 存放公共调用的js service //请求后端数据公有类 controllers ...
- git使用步骤
1报名出处: git config --global user.name lhp 用户名 git config --global user.email a@.qq.com 邮箱 2.建立项目文件夹: ...
- bcache的使用
一.前提:内核中需要配置bcache模块 1.1 检查 - 是否存在于内核中:检查/sys/fs/bcache目录是否存在,没有说明内核中没有bcache - 是否以内核模块方式存在:检查/lib/m ...
- 《精通android网络开发》--使用Socket实现数据通信
No1: 网络传输应用通常使用TCP.IP或UDP这三种协议实现数据传输.在传输数据的过程中,需要通过一个双向的通信连接实现数据的交互.在这个传输过程中,通常将这个双向链路的一端称为Socket,一个 ...
- pep 8 规范的一些记录
一.pep8起源 龟叔创立Python的初衷里就有创立一个容易阅读的编程语言,所以亲自操刀写了pep8 代码规范,每个项目开始前都要有一个共识,就是自己的代码规范,pep8 就是一个很好的范本. 二. ...