您好,登錄后才能下訂單哦!
記得剛接觸asp.net的時候,就被幾個概念搞的頭痛不已,比如Request,Response,Session和Cookie。然后還各種在搜索引擎搜,各種問同事的,但是結(jié)果就是自己還是很懵的節(jié)奏。
那cookie到底是毛???下面是我最不喜歡的一種解釋方式(官方定義吧應(yīng)該叫,我這種智商根本讀不懂嘛~)
Cookie對象也稱緩存對象,該對象用于保存客戶端瀏覽器請求的服務(wù)器頁面,也可用它存放非敏感性的用戶信息。
以前根本讀不懂啊,現(xiàn)在其實也懵懵的。
還是用例子能把這個概念搞明白
1、做一個用戶登錄的界面,用cookies保存登錄信息的功能。如圖:
后臺代碼:
protected void Page_Load(object sender, EventArgs e) { if (Request.Cookies["password"] != null) { if (DateTime.Now.CompareTo(Request.Cookies["password"].Expires) > 0) { textbox_password.Text = Request.Cookies["password"].Value; } } } protected void button_login_Click(object sender, EventArgs e) { if (checkbox_remember.Checked) { HttpCookie cookie_password = new HttpCookie("password"); cookie_password.Value = textbox_password.Text; Response.Cookies.Add(cookie_password); DateTime dtNow = DateTime.Now; TimeSpan ts = new TimeSpan(0, 0, 0, 10);//這里是將cookie的有效期設(shè)置成10s cookie_password.Expires = dtNow.Add(ts); } }
這個例子很簡單,思路就是選擇記住密碼的checkbox,就創(chuàng)建一個cookie用于記錄密碼的內(nèi)容,同時設(shè)置有效期。當(dāng)下次加載的時候,判斷有沒有這個“密碼”cookie,有的話判斷這個cookie是否過期,若未過期,就將這個cookie里存的值取出來,放到對應(yīng)的文本框中。
這里把有效期設(shè)置為10s的原因是為了讓大家看到的效果明顯些。大家只要不斷的去刷新頁面,就會發(fā)現(xiàn)在10s之前,密碼部分還是一直有值,過了10s,就自動清空了。這就是因為cookie到期。
2、一個統(tǒng)計當(dāng)前IP登錄頁面次數(shù)的功能。界面如圖:
string ipAddress = string.Empty; protected void Page_Load(object sender, EventArgs e) { ipAddress = Dns.GetHostByName(Server.MachineName.ToString()).AddressList[0].ToString(); if (!IsPostBack) { if (Request.Cookies.AllKeys.Contains(ipAddress)) { //Request.Cookies[ipAddress].Value = (Convert.ToInt32(Request.Cookies[ipAddress].Value) + 1).ToString();@@@ HttpCookie cookie_ip = new HttpCookie(ipAddress); cookie_ip.Value = (Convert.ToInt32(Request.Cookies[ipAddress].Value) + 1).ToString(); Response.Cookies.Set(cookie_ip); } else { HttpCookie cookie_ip = new HttpCookie(ipAddress); cookie_ip.Value = "1"; Response.Cookies.Add(cookie_ip); DateTime dtNow = DateTime.Now; TimeSpan ts = new TimeSpan(0, 0, 0, 20); cookie_ip.Expires = dtNow.Add(ts); } } } protected void button_statistics_Click(object sender, EventArgs e) { if (Request.Cookies[ipAddress] != null) { textbox_count.Text = Request.Cookies[ipAddress].Value; } else { textbox_count.Text = "0"; } } protected void button_clear_Click(object sender, EventArgs e) { HttpCookie cookie_ip = new HttpCookie(ipAddress); cookie_ip.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Set(cookie_ip); Request.Cookies.Remove(ipAddress); Request.Cookies.Clear(); }
這個小例子的思路就是,先獲得本地的IP地址,這就保證了添加Cookie的時候,給Cookie了一個獨一無二的key。在刷新頁面的時候,去判斷當(dāng)前所有Cookie中是否存在一個同名的cookie。如果不存在,就新建一個cookie,當(dāng)然,此cookie的key=IP地址。就是Page_Load里else的部分。如果存在,那么就在原來的值的基礎(chǔ)上加1。這里要注意修改已存在Cookie值的寫法。
最開始的時候我用的是注釋掉的@@@這行代碼,就是正常思路,看著也沒什么問題呀,不過這樣寫不行,第一次加載之后的每次加載,取到的Request.Cookies[ipAddress].Value這個值總是1。所以對于修改已有的cookie值,還是需要使用cookies的set方法才行。
此外還有一個地方是需要注意的,就是刪除cookie的時候,如果直接使用Cookies.Remove或者Cookies.Clear()方法都達不到想要的效果。需要配合的加上Expires,給一個負值。然后去更新Cookie,再刪除,這樣這個cookie就徹底消失了。否則在下次加載的時候又會出現(xiàn),這個還真不知道是為什么?我之前就寫了一句Request.Cookies.Clear(),打斷點跟的時候,所有的cookie確實都清空了,但是當(dāng)再次加載的時候,在添加cookie前打了斷點,會發(fā)現(xiàn)之前刪除的cookie又出現(xiàn)了。很奇怪啊~~
希望明白的朋友告訴一聲怎么回事哈。
兩個簡單的小例子讓自己對cookie不再感覺那么陌生和害怕了。所以光看概念還是效果一般,動手才是王道呀~
新浪微博:http://weibo.com/zhouhongyu1989 歡迎圍觀~!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。