Token主要爲了防止非本頁數據的提交,防止重複提交。算法
/** * * 保存TOKEN信息 * */ public void saveToken() { //此處生成md5串 string md5 = getMD5(token_id); this.ViewData[Constant.TOKEN_ID_FORM] = "<input type=\"hidden\" name=\"" + Constant.TOKEN_ID_FORM + "\" value=\"" + md5 + "\">"; this.Session[Constant.TOKEN_ID_FORM] = md5; } /** * * 驗證FORM 內的TOKEN信息 是否與SESSION的信息一致 * */ public bool isValidateToken() { string md5 = this.Session[Constant.TOKEN_ID_FORM] as string; string md5_form = this.read(Constant.TOKEN_ID_FORM); if (string.IsNullOrEmpty(md5)) { return false; } else { if (md5.Equals(md5_form)) { return true; } else { return false; } } } /** * * 對數據進行加密,生成32位的16進制字符串 * */ public static string getMD5(string strSource) { string strResult = ""; try { //Create System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create(); //注意編碼UTF八、UTF七、Unicode等的選擇 byte[] bytResult = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource)); //字節類型的數組轉換爲字符串 for (int i = 0; i < bytResult.Length; i++) { //16進制轉換 string temps = bytResult[i].ToString("x"); if (temps.Length == 1) { temps = "0" + temps; } strResult = strResult + temps; } } catch (Exception ex) { logger.Error("MD5加密算法錯誤!錯誤信息:" + ex.Message); } return strResult.Substring(8,16); }
調用:數組
//跳轉的前一個頁面,生成Token this.saveToken(); //保存頁面 驗證Token if (this.isValidateToken()) { //從新設置token this.saveToken(); }