C# TOKEN的保存与验证

 

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();

                //注意编码UTF8、UTF7、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();
            }

 

posted @ 2016-05-17 16:32    阅读(8863)  评论(0编辑  收藏  举报