• C# Web开发 标准读写Cookies的方法 支持跨二级域和虚拟目录


    加密Cookies和解密Cookies方法:
    
    
    加密/解密方法 DESEncrypt
        public class DESEncrypt
         {
            #region ========加密========
    
            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="Text"></param>
            /// <returns></returns>
            public static string Encrypt(string Text)
             {
                return Encrypt(Text, "lixyvip");
             }
            /// <summary> 
            /// 加密数据 
            /// </summary> 
            /// <param name="Text"></param> 
            /// <param name="sKey"></param> 
            /// <returns></returns> 
            public static string Encrypt(string Text, string sKey)
             {
                 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] inputByteArray;
                 inputByteArray = Encoding.Default.GetBytes(Text);
                 des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
                 des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
                 System.IO.MemoryStream ms = new System.IO.MemoryStream();
                 CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                 cs.Write(inputByteArray, 0, inputByteArray.Length);
                 cs.FlushFinalBlock();
                 StringBuilder ret = new StringBuilder();
                foreach (byte b in ms.ToArray())
                 {
                     ret.AppendFormat("{0:X2}", b);
                 }
                return ret.ToString();
             }
    
            #endregion
    
            #region ========解密========
    
    
            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="Text"></param>
            /// <returns></returns>
            public static string Decrypt(string Text)
             {
                return Decrypt(Text, "lixyvip");
             }
            /// <summary> 
            /// 解密数据 
            /// </summary> 
            /// <param name="Text"></param> 
            /// <param name="sKey"></param> 
            /// <returns></returns> 
            public static string Decrypt(string Text, string sKey)
             {
                try
                 {
                     DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                    int len;
                     len = Text.Length / 2;
                    byte[] inputByteArray = new byte[len];
                    int x, i;
                    for (x = 0; x < len; x++)
                     {
                         i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                         inputByteArray[x] = (byte)i;
                     }
                     des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
                     des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
                     System.IO.MemoryStream ms = new System.IO.MemoryStream();
                     CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                     cs.Write(inputByteArray, 0, inputByteArray.Length);
                     cs.FlushFinalBlock();
                    return Encoding.Default.GetString(ms.ToArray());
                 }
                catch 
                 {
                    return Text;
                 }
             }
    
            #endregion
         }
    
    
    读取当前客户机器所有的Cookies代码:
    
    
                string[] keyArr = HttpContext.Current.Request.Cookies.AllKeys;
                for (int c = 0; c < keyArr.Length; c++)
                 {
                     Response.Write(HttpContext.Current.Request.Cookies[keyArr[c]].Name);
                     Response.Write("<br />");
                     Response.Write(HttpContext.Current.Request.Cookies[keyArr[c]].Expires.ToString());
                     Response.Write("<br />");
                     Response.Write(HttpContext.Current.Request.Cookies[keyArr[c]].Value);
                     Response.Write("<br />");
                     Response.Write("<br />");
                 }
    
    
    
    使用或自己写重载方法参考示例:Cookie有三个属性需要注意一下:
    1. Domain 域
    2. Path       路径
    3. Expires 过期时间
    
    跨域操作需要设置域属性:
    Response.Cookies("MyCookie").Domain = "cnblogs.com"; (这里指的是泛域名)
    这样在其它二级域名下就都可以访问到了, ASP 和 ASP.NET 测试通过
    
    虚拟目录下访问:
    我在ASP端做了下测试,.NET的没试, 如果不指定Path属性, 不同虚拟目录下Cookie无法共享
    将Response.Cookies("MyCookie").Path = "/" 就可以了
    
    总的写法:
    Response.Cookies("MyCookie").Domain = "cnblogs.com";
    Response.Cookies("MyCookie").Path = "/"
    Response.Cookies("MyCookie").Expires = Now + 365;
    Response.Cookies("MyCookie")("Test") = "test";
    
    SetUserCookies(SiteInfo.DomainName, "/", "hnce", name, str, DateTime.Now.AddMinutes(miniute));
    
    return GetUserCookies("hnce", name);
    
    ClearUserCookies(SiteInfo.DomainName, "/", "hnce");
    
    
    另外提醒一下,cookie.Values.Add(_cookiename, _value); 跟 cookie.Values[_cookiename] = _value; 这两种方式都可以设置Cookies的值,但是Add和Set方法后,读取要使用Get方法,而Values[]赋值方式,读取要使用HttpContext.Current.Request.Cookies[_key][_cookiename].ToString() 
    
    否则有Cookies读取不了的情况。
    
    
    //下面附参考文章的部分内容说明
    
    //------------------------------------------------------------------------
    
    
    在博客园看到另外一个朋友的可跨二级域操作Cookies方法,在它基础上完善了一下,现发出来
    
    我参考的哪位朋友的文章地址是:http://www.cnblogs.com/voswin/articles/1281520.html 
    
    如果无法使用:
    
    请导入命名空间
    
    using System.Security.Cryptography;
    using System.Text
    
    
  • 相关阅读:
    paip.调用GUI接口.
    paip.按键替换映射总结
    paip.IIS 7.5 应用程序池,应用程序以及虚拟目录的存储位置
    paip.android 手机输入法制造大法
    paip.设置鼠标灵敏度API
    paip.系统无法在消息文件中为 Application 找到消息号为 0x2350 的消息文本。服务器存储空间不足,无法处理此命令
    paip.DEVSUIT WEB .NET ASPX网站打开慢的原因
    paip.动画透明淡入淡出窗口之重绘性能
    PAIP。JS调用DLL的解决方案
    paip.输入法编程四级非常用汉字汉字1000个
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1721646.html
Copyright © 2020-2023  润新知