ASP.NET中Cookie的作用是什么

本篇文章給大家分享的是有關(guān)ASP.NET中Cookie的作用是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

成都創(chuàng)新互聯(lián)是專業(yè)的夾江網(wǎng)站建設(shè)公司,夾江接單;提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行夾江網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

ASP.NET Cookie在Web開(kāi)發(fā)中應(yīng)用較多。做用戶登錄,我一直用form驗(yàn)證的方式。有時(shí)候,為了節(jié)省時(shí)間,用戶希望用戶名輸入框能夠記住用戶名,省得下次重新輸入。這個(gè)時(shí)候光用form驗(yàn)證是不行的,因?yàn)閒orm驗(yàn)證的話,用戶一退出系統(tǒng)就失效了,所以需要借助于Cookie。

本以為做這個(gè)會(huì)很輕松,誰(shuí)知花了不少時(shí)間也沒(méi)有成功。雖然檢驗(yàn)用戶名和密碼都是正確的,但系統(tǒng)總是拒絕登錄,然后返回到登錄頁(yè)面。登錄頁(yè)面的用戶名輸入框記是記住用戶名了,但用戶名是亂碼的。

真是郁悶至極!一度以為系統(tǒng)發(fā)生了錯(cuò)亂,重啟機(jī)器也還是無(wú)濟(jì)于事。經(jīng)反復(fù)檢查和測(cè)試發(fā)現(xiàn),如果在form驗(yàn)證之前寫(xiě)入cookies,就會(huì)拒絕登錄。這可能是asp.net出于安全考慮,發(fā)現(xiàn)了一個(gè)與from標(biāo)識(shí)相同的cookies值,但是它沒(méi)有明確地這樣提示。

解決這個(gè)問(wèn)題的做法是,要先驗(yàn)證登錄再把用戶名寫(xiě)入cookies,這樣就可以成功。

System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text,false);//登錄...  //將用戶名寫(xiě)入cookies  Response.Cookies["RememberMe"].Value = HttpUtility.UrlEncode(UserName.Text, System.Text.Encoding.GetEncoding("gb2312"));  Response.Cookies["RememberMe"].Expires = DateTime.Now.AddMonths(1);

至于輸入框的用戶名顯示為亂碼是因?yàn)榇鎯?chǔ)的是中文用戶名,把中文字符寫(xiě)入cookies時(shí),如果不做任何處理是會(huì)生產(chǎn)亂碼的。解決方法是如上面紅色代碼所示,在寫(xiě)入的時(shí)候使用url編碼,而且編碼格式需要是中文格式的。在取得cookies值的時(shí)候做相應(yīng)的解碼即可:

UserName.Text = HttpUtility.UrlDecode(Request.Cookies["RememberMe"].Value, System.Text.Encoding.GetEncoding("gb2312"));

另一個(gè)問(wèn)題是刪除cookies,以前一直以為用Response.Cookies.Remove("RememberMe")可以刪除,但就是沒(méi)有效果。原來(lái)調(diào)用Cookies集合的 Remove 方法可從服務(wù)器端的集合中移除 Cookie,使 Cookie 不會(huì)被發(fā)送至客戶端。但是,如果客戶端已存在   Cookie,則該方法無(wú)法從客戶端將其移除。 解決方法是,將 Cookie 的到期日期設(shè)置為過(guò)去的日期,讓用戶的瀏覽器來(lái)刪除 Cookie:

if (Response.Cookies["RememberMe"] != null) Response.Cookies["RememberMe"].Expires = DateTime.Now.AddDays(-1);//刪除

***一個(gè)問(wèn)題是創(chuàng)建瀏覽器進(jìn)程的cookies(即關(guān)閉瀏覽器就會(huì)自動(dòng)清空),創(chuàng)建方法相當(dāng)簡(jiǎn)單,不要設(shè)置Expires屬性就是默認(rèn)的瀏覽器進(jìn)程cookies。

結(jié)尾附上關(guān)鍵部分的代碼

System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text,false);//登錄,一定要先驗(yàn)證         if (RememberMe.Checked)//再寫(xiě)入cookie        {            if (Request.Cookies["RememberMe"] == null)            {                Response.Cookies["RememberMe"].Value = HttpUtility.UrlEncode(UserName.Text, System.Text.Encoding.GetEncoding("gb2312"));                Response.Cookies["RememberMe"].Expires = DateTime.Now.AddMonths(1);            }        }        else       {            if (Response.Cookies["RememberMe"] != null) Response.Cookies["RememberMe"].Expires = DateTime.Now.AddDays(-1);//刪除        }

讀取cookies值的時(shí)候:

if (!IsPostBack)  {      if (Request.Cookies["RememberMe"] != null)      {          UserName.Text = HttpUtility.UrlDecode(Request.Cookies["RememberMe"].Value, System.Text.Encoding.GetEncoding("gb2312"));          RememberMe.Checked = true;      }  }

總結(jié)一下:

1.寫(xiě)一個(gè)與form驗(yàn)證相同用戶名的值到cookies中,應(yīng)該先驗(yàn)證后寫(xiě)cookies,否則會(huì)產(chǎn)生沖突,導(dǎo)致驗(yàn)證不能通過(guò)。

2.刪除cookie的正確方法是設(shè)置已有cookies的日期為早于當(dāng)前時(shí)間的日期,使用Cookies.Remove是沒(méi)有效果的。

3.創(chuàng)建瀏覽器進(jìn)程的cookies,不要設(shè)置Expires屬性就行了,這樣關(guān)閉瀏覽器就會(huì)自動(dòng)被清空

4.cookies值是中文的時(shí)候***用gb2312編碼一下,這樣可以避免產(chǎn)生亂碼。

以上就是ASP.NET中Cookie的作用是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標(biāo)題:ASP.NET中Cookie的作用是什么
URL分享:http://www.muchs.cn/article14/ghgige.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作域名注冊(cè)、網(wǎng)站設(shè)計(jì)公司、響應(yīng)式網(wǎng)站、ChatGPT、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)