公海(首页)赌船最新网址·最新下载App Store

  
"form1" runat="server">
  
    "text" id="tbxName" runat="server" />
    "text" id="tbxPass" value="" runat="server" />
    "btnSubmit" runat="server" OnClick="Button1_Click" Text="Button" />
    "lblMessage" runat="server" Text="">
    "hiddenTest" type="hidden" value="<%= GetToken() %>" name="hiddenTestN" />
  
  

 

需要注意的地方:

  1 GetToken()函数是为了获得 Session里面保存的标志。
  2 Hidden使用了非服务器控件,这是因为我使用服务器控件,并在后台直接获取Session的标志并赋值给这个Hidden的时候,刷新提交到服务器的 表单中的Hidden的值也发生了改变,猜想是服务器控件的话,表单里面的值是保持同步的,当然,也可能是我用的方法不对,嘎嘎。

下面是后台代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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;
 
namespace Test.Web
{
 
  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;
    }
  }
}

 

XML 地图