自动登录或7天登录的实现

后台cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Management;

namespace WebApplication2
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        /// <summary>
        /// pageLoad事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            //自动登录
            if (!IsPostBack)
            {
               if (!String.IsNullOrEmpty(CookieUtil.ReadCookies("eBooking_SGUserInfo")))
                { //自动登录
                    UserLogin("", "");
                }
               else
               {
                   //普通登录
               }
            }
        }

        /// <summary>
        /// 登录方法
        /// </summary>
        /// <param name="strLoginName"></param>
        /// <param name="strPASSWORD"></param>
        private void UserLogin(string strLoginName, string strPASSWORD) 
        {
            UserInfoResponse userEntity = null;//创建的实体
            if (!String.IsNullOrEmpty(CookieUtil.ReadCookies("eBooking_SGUserInfo")))
            {
                string decryCookie = DESEncrypt.DecryptDES(CookieUtil.ReadCookies("eBooking_SGUserInfo"),ConfigurationManager.AppSettings["DesKey"].ToString());
                string[] cookieValue = decryCookie.Split('|');
                if (cookieValue.Length > 0)
                {
                    if (cookieValue[1] == GetNetCardMacAddress())
                    {
                        userEntity = null;//这里根据cookieValue[0](用户名)去数据库查询用户相关信息
                    }
                }
            }
            else
            {
                userEntity = null;//这里是普通登录 
            }


            if (true)//这里判断自动登录按钮是否选中
            {
                string cookieValue = GetUserLoginCookieValue();//得到cookie
                //写cookie
                CookieUtil.WriteCookies("eBooking_SGUserInfo", cookieValue, 7,CookieUtil.TimeUnit.Day);
            }
        }


        #region 得到用户Cookie Value
        /// <summary>
        /// 得到用户Cookie value
        /// </summary>
        /// <returns></returns>
        private string GetUserLoginCookieValue()
        {
            string cookieValue = "";
            string UserCode = "";//用户名的Code

            cookieValue =UserCode + "|" + GetNetCardMacAddress();//用户名和mac地址
            //加密
            string EncryCookieValue = DESEncrypt.EncryptDES(cookieValue, ConfigurationManager.AppSettings["DesKey"]);
            return EncryCookieValue;
        }
        #endregion

        #region 获取MAC地址
        /// <summary>
        /// 获取MAC地址
        /// </summary>
        /// <returns></returns>
        public string GetNetCardMacAddress()
        {

            ManagementClass mc;//注意引用System.Management和System.Management.Instrumentation
            ManagementObjectCollection moc;
            mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            moc = mc.GetInstances();
            string str = "";
            foreach (ManagementObject mo in moc)
            {
                if ((bool)mo["IPEnabled"] == true)
                    str = mo["MacAddress"].ToString();
            }
            return str;
        }
        #endregion
    }
}

 要用到的两个类

CookieUtil.cs

cookie类 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication2
{
    public class CookieUtil
    {
        /// <summary>
        /// 写Cookies
        /// </summary>
        /// <param name="indexValue">Cookie名</param>
        /// <param name="textValue">Cookie值</param>
        /// <param name="expries">过期时间</param>
        /// <param name="times">时间单位枚举</param>
        public static void WriteCookies(string indexValue, string textValue, int expries, TimeUnit times)
        {
            if (HttpContext.Current.Response.Cookies[indexValue] != null)
                HttpContext.Current.Response.Cookies[indexValue].Expires = DateTime.Now.AddDays(-1);

            HttpContext.Current.Response.Cookies[indexValue].Value = textValue;

            DateTime dtNow = DateTime.Now;

            switch (times)
            {
                case TimeUnit.Second:
                    dtNow = dtNow.AddSeconds(expries);
                    break;
                case TimeUnit.Minute:
                    dtNow = dtNow.AddMinutes(expries);
                    break;
                case TimeUnit.Hour:
                    dtNow = dtNow.AddHours(expries);
                    break;
                case TimeUnit.Day:
                    dtNow = dtNow.AddDays(expries);
                    break;
                case TimeUnit.Month:
                    dtNow = dtNow.AddMonths(expries);
                    break;
                default:
                    dtNow = dtNow.AddYears(expries);
                    break;
            }

            HttpContext.Current.Response.Cookies[indexValue].Expires = dtNow;
        }

        /// <summary>
        /// 读Cookies
        /// </summary>
        /// <param name="indexValue">Cookie名</param>
        /// <returns>返回Cookie 值</returns>
        public static string ReadCookies(string indexValue)
        {
            if (HttpContext.Current.Request.Cookies[indexValue] != null)
            {
                //Encoding stre = Encoding.GetEncoding("GB2312");
                return HttpContext.Current.Request.Cookies[indexValue].Value.ToString();
            }

            return string.Empty;
        }

        /// <summary>
        /// 删除Cookies,立即过期
        /// </summary>
        /// <param name="indexValue">Cookie名</param>
        /// <param name="times">时间单位枚举</param>
        public static void DeleteCookies(string indexValue, TimeUnit times)
        {
            if (HttpContext.Current.Request.Cookies[indexValue] != null)
            {
                HttpCookie cookies = HttpContext.Current.Request.Cookies[indexValue];

                DateTime dtNow = DateTime.Now;

                switch (times)
                {
                    case TimeUnit.Second:
                        dtNow = dtNow.AddSeconds(-1);
                        break;
                    case TimeUnit.Minute:
                        dtNow = dtNow.AddMinutes(-1);
                        break;
                    case TimeUnit.Hour:
                        dtNow = dtNow.AddHours(-1);
                        break;
                    case TimeUnit.Day:
                        dtNow = dtNow.AddDays(-1);
                        break;
                    case TimeUnit.Month:
                        dtNow = dtNow.AddMonths(-1);
                        break;
                    default:
                        dtNow = dtNow.AddYears(-1);
                        break;
                }

                cookies.Expires = dtNow;
                HttpContext.Current.Response.Cookies.Add(cookies);
            }
        }

        public enum TimeUnit
        {
            /// <summary>
            /// 秒
            /// </summary>
            Second,
            /// <summary>
            /// 分
            /// </summary>
            Minute,
            /// <summary>
            /// 时
            /// </summary>
            Hour,
            /// <summary>
            /// 天
            /// </summary>
            Day,
            /// <summary>
            /// 月
            /// </summary>
            Month,
            /// <summary>
            /// 年
            /// </summary>
            Year
        }
    }
}

加密类

  DESEncrypt.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace WebApplication2
{
    public class DESEncrypt
    {
        /// <summary>
        /// 默认密钥向量
        /// </summary>
        private static byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

        /// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="encryptString">待加密的字符串</param>
        /// <param name="encryptKey">加密密钥,要求为8位</param>
        /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
        public static String EncryptDES(string encryptString, string encryptKey)
        {
            byte[] bKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
            byte[] bIV = IV;
            byte[] bStr = Encoding.UTF8.GetBytes(encryptString);
            try
            {
                DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, desc.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write);
                cStream.Write(bStr, 0, bStr.Length);
                cStream.FlushFinalBlock();
                return Convert.ToBase64String(mStream.ToArray());
            }
            catch
            {
                return string.Empty;
            }
        }

        /// <summary>
        /// DES解密字符串
        /// </summary>
        /// <param name="decryptString">待解密的字符串</param>
        /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同></param>
        /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
        public static String DecryptDES(String decryptString, String decryptKey)
        {
            try
            {
                byte[] bKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 8));
                byte[] bIV = IV;
                byte[] bStr = Convert.FromBase64String(decryptString);
                DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, desc.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write);
                cStream.Write(bStr, 0, bStr.Length);
                cStream.FlushFinalBlock();
                return Encoding.UTF8.GetString(mStream.ToArray());
            }
            catch
            {
                return string.Empty;
            }
        }
    }
}

  ok

posted @ 2012-12-13 16:13  Snail的梦  阅读(1320)  评论(0编辑  收藏  举报