天天看點

ASP.NET Cookies簡單應用 [ASP.NET | Cookies]

 CookiesHelper.cs

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

namespace TLibrary.ObjectHelper

{

    public class CookiesHelper

    {

        #region 擷取Cookie

        /// <summary>

        /// 獲得Cookie的值

        /// </summary>

        /// <param name="cookieName"></param>

        /// <returns></returns>

        public static string GetCookieValue(string cookieName)

        {

            return GetCookieValue(cookieName, null);

        }

        /// <param name="key"></param>

        public static string GetCookieValue(string cookieName,string key)

            HttpRequest request = HttpContext.Current.Request;

            if (request != null)

                return GetCookieValue(request.Cookies[cookieName], key);

            return "";

        /// 獲得Cookie的子鍵值

        /// <param name="cookie"></param>

        public static string GetCookieValue(HttpCookie cookie, string key)

            if (cookie != null)

            {

                if (!string.IsNullOrEmpty(key) && cookie.HasKeys)

                    return cookie.Values[key];

                else

                    return cookie.Value;

            }

        /// 獲得Cookie

        public static HttpCookie GetCookie(string cookieName)

                return request.Cookies[cookieName];

            return null;

        #endregion

        #region 删除Cookie

        /// 删除Cookie

        public static void RemoveCookie(string cookieName)

            RemoveCookie(cookieName,null);

        /// 删除Cookie的子鍵

        public static void RemoveCookie(string cookieName,string key)

            HttpResponse response = HttpContext.Current.Response;

            if (response != null)

                HttpCookie cookie = response.Cookies[cookieName];

                if (cookie != null)

                {

                    if (!string.IsNullOrEmpty(key) && cookie.HasKeys)

                        cookie.Values.Remove(key);

                    else

                        response.Cookies.Remove(cookieName);

                }

        #region 設定/修改Cookie

        /// 設定Cookie子鍵的值

        /// <param name="value"></param>

        public static void SetCookie(string cookieName, string key, string value)

            SetCookie(cookieName, key, value, null);

        /// 設定Cookie值

        public static void SetCookie(string key, string value)

            SetCookie(key, null, value, null);

        /// 設定Cookie值和過期時間

        /// <param name="expires"></param>

        public static void SetCookie(string key, string value, DateTime expires)

            SetCookie(key, null, value, expires);

        /// 設定Cookie過期時間

        public static void SetCookie(string cookieName, DateTime expires)

            SetCookie(cookieName, null, null, expires);

        /// 設定Cookie

        public static void SetCookie(string cookieName, string key, string value, DateTime? expires)

                        cookie.Values.Set(key, value);

                        if (!string.IsNullOrEmpty(value))

                            cookie.Value = value;

                    if (expires != null)

                        cookie.Expires = expires.Value;

                    response.SetCookie(cookie);

        #region 添加Cookie

        /// 添加Cookie

        public static void AddCookie(string key, string value)

            AddCookie(new HttpCookie(key, value));

        public static void AddCookie(string key, string value, DateTime expires)

            HttpCookie cookie = new HttpCookie(key, value);

            cookie.Expires = expires;

            AddCookie(cookie);

        /// 添加為Cookie.Values集合

        public static void AddCookie(string cookieName,string key, string value)

            HttpCookie cookie = new HttpCookie(cookieName);

            cookie.Values.Add(key, value);

        /// 添加為Cookie集合

        /// <param name="cookieName">Cookie名稱</param>

        /// <param name="expires">過期時間</param>

        public static void AddCookie(string cookieName, DateTime expires)

        public static void AddCookie(string cookieName, string key, string value, DateTime expires)

        public static void AddCookie(HttpCookie cookie)

                //指定用戶端腳本是否可以通路[預設為false]

                cookie.HttpOnly = true;         

                //指定統一的Path,比便能通存通取

                cookie.Path = "/";

                //設定跨域,這樣在其它二級域名下就都可以通路到了

                //cookie.Domain = "chinesecoo.com";

                response.AppendCookie(cookie);

    }

}

代碼注意事項:

          1.     Cookies添加的時候注意一個Cookie可以添加多個子鍵

          2.     假如你不顯示的設定   HttpCookie.Expires   那麼此   cookie   生命期即為浏覽器程序——關閉浏覽器則過期

          3.     需要了解HttpCookie.Domain和HttpCookie.Path這兩個屬性,對于跨域和存儲路徑等進階應用有幫助

以下看實際調用代碼

          頁面加載

    protected void Page_Load(object sender, EventArgs e)

        if (!IsPostBack)

            HttpCookie Cookie = CookiesHelper.GetCookie("UserInfo");

            if (Cookie != null)

                this.txtUserName.Value = Cookie.Values["uName"];

          代碼說明:

                    1.     this.txtUserName是界面上輸入使用者名的控件,換成自己的控件名稱就行;

                    2.     UserInfo為Cookie的名稱,uName為Cookie的子鍵。

          這段代碼的功能是在頁面加載的時候顯示使用者Cookie中記錄的使用者名,這裡也可以做成連密碼一起記錄然後在這裡顯示,這樣使用者就可以直接點登入按鈕了

          登入驗證

        string uName = this.txtUserName.Value.Trim();

        //驗證使用者名密碼

        if (IsLogin(uName, this.txtPass.Value.Trim()))

            //記住我的名字

            if (!string.IsNullOrEmpty(Request["remUsername"]))

                HttpCookie Cookie = CookiesHelper.GetCookie("UserInfo");

                if (Cookie == null)

                    Cookie = new HttpCookie("UserInfo");

                    Cookie.Values.Add("uName", uName);

                    //設定Cookie過期時間

                    Cookie.Expires = DateTime.Now.AddDays(365);

                    CookiesHelper.AddCookie(Cookie);

                else if (!Cookie.Values["uName"].Equals(uName))

                    CookiesHelper.SetCookie("UserInfo", "uName", uName);

            Response.Redirect("~/index.aspx");

                    1.     this.txtUserName和this.txtPass是界面上輸入使用者名和密碼的控件,換成自己的控件名稱就行;

                    2.     IsLogin方法是用來驗證使用者名和密碼是否正确的,這裡替換成自己的驗證方法就行了。

                    3.     Request["remUsername"]是獲得界面上是否選中了[記住我的名稱]複選框

          這段代碼的功能是在使用者登入成功之後,如果選中了記住登入使用者名就把使用者名存入用戶端的Cookie中,并設定過期時間為1年。

               1.     根據實際的經驗,一般的情況下在本地調試不設定Domain屬性,挂上伺服器上配上域名之後就得指定Domain參數了,否則Cookies出不來的。(2008-11-24 10:32:00)