ASP.NET에서 페이지 새로 고침을 방지하여 양식 중복 제출
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="text" id="tbxName" runat="server"/>
<input type="text" id="tbxPass" value="" runat="server"/>
<asp:Button ID="btnSubmit" runat="server" OnClick="Button1_Click" Text="Button" />
<asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
<input id="hiddenTest" type="hidden" value="<%= GetToken() %>" name="hiddenTestN"/>
</div>
</form>
</body>
</html>
주의해야 할 점: 1 GetSessionToken() 함수는 Session에 저장된 로고를 얻기 위한 것이다.2 Hidden은 비 서버 컨트롤을 사용했습니다. 이것은 제가 서버 컨트롤을 사용하고 백엔드에서 Session의 로고를 직접 가져와 이 Hidden에게 값을 부여할 때 서버에 제출한 폼에 새로 고친 Hidden의 값도 바뀌었기 때문입니다. 서버 컨트롤이라고 추측하면 폼 안의 값이 동기화됩니다. 물론 제가 사용한 방법이 틀렸을 수도 있습니다.삐걱삐걱다음은 백그라운드 코드입니다.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Security.Cryptography;
using System.Text;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// ,
if (null == Session["Token"])
{
SetToken();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Request.Form.Get("hiddenTestN").Equals(GetToken()))
{
lblMessage.ForeColor = System.Drawing.Color.Blue;
lblMessage.Text = " ";
SetToken();// Session
}
else
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text = " ";
}
}
// Session
public string GetToken()
{
if (null != Session["Token"])
{
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 = 0; i < s.Length; i++)
{
// 。 , (X)
pwd = pwd + s[i].ToString("X");
}
return pwd;
}
}
주의해야 할 점: 1 페이지를 처음 불러올 때 로고를 생성해야 하며 이후에는 사용하지 않습니다.2 폼 처리 함수의 마지막에 로고를 업데이트하는 것을 기억하세요.3 로고 저는 현재Session ID에 현재 시간 밀리초 값을 사용했습니다. 이렇게 하면 로고가 중복되는 것을 피할 수 있습니다. 그 다음에 MD5를 한 번 진행했습니다. 순전히 로고를 짧게 하기 위해서입니다. 물론 조금은 안전하다는 뜻이 있습니다. 하하.
원문:http://www.cnblogs.com/binaryworms/articles/2207028.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.