ASP與ASP.NET互連COOKIES的一點經驗

來源:互聯網
上載者:User

在微軟推出.NET並進行了大規模的推廣普及之後,ASP.NET逐漸進入了資訊化系統開發的主流。但與此同時,而用ASP開發的舊系統面則臨被整合,這時,面臨一個問題:ASP與ASP.NET互相整合時,其中文COOKIES資訊無法被互連共用,當使用ASP.NET寫入中文COOKIES資訊後,使用ASP進行讀取,讀出來的卻是亂碼,而非中文。
後來通過尋找資料,不停地實踐,終於找到了問題的根源,中文COOKIES資訊在ASP中無法被正確讀取得原因為其中文編碼格式不同。
開發項目Web.config設定檔中有如下資訊:

<!-- 全球化 此節設定應用程式的全球化設定。 -->
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

據此可知,在沒有進行項目特殊配置的情況下,系統中的中文COOKIES資訊預設是通過“utf-8”編碼方式進行傳遞的,而ASP中中文COOKIES資訊預設是通過“GB2312”編碼方式進行傳遞的,所以ASP與ASP.NET的中文COOKIES資訊在預設情況下無法被互連共用,但可以通過如下方法得以解決:
用如下方法進行寫COOKIE操作:

'----------------------------------------------------------------
' Name: WriteCookie(ByVal strCookieName As String, ByVal strKeyName As String, ByVal strKeyValue As String)
' Parameters:
' [ByVal] strCookieName - cookie名字
' [ByVal] strKeyName - 鍵名字
' [ByVal] strKeyValue - 索引值。
' Return: String
'----------------------------------------------------------------
Public Function WriteCookie(ByVal strCookieName As String, ByVal strKeyName As String, ByVal strKeyValue As String) As String
Dim objEnc As System.Text.Encoding = System.Text.Encoding.GetEncoding("GB2312")
strKeyValue = System.Web.HttpUtility.UrlEncode(strKeyValue, objEnc)
System.Web.HttpContext.Current.Response.Cookies(strCookieName)(strKeyName) = strKeyValue
End Function

以上方法實現了ASP可以正確讀取ASP.NET寫入的中文COOKIES資訊,但同時如果在ASP.NET中將讀取過來的中文COOKIES資訊直接在前台顯示時還會顯示為亂碼,這是由於ASP.NET以“utf-8”編碼方式顯示“GB2312”編碼方式的中文資訊,所以出現了問題,可以用如下方法在前台頁面正確顯示中文資訊:

Dim uName As String = System.Web.HttpContext.Current.Server.UrlDecode(System.Web.HttpContext.Current.Request.Cookies(strCookieName)(strKeyName))
Dim objEnc As System.Text.Encoding = System.Text.Encoding.GetEncoding("GB2312")
uName = System.Web.HttpUtility.UrlDecode(uName, objEnc)

以上方法解決了中文COOKIES資訊在ASP與ASP.NET中無法被互連共用的問題,不過不知可不可以通過修改Web.config設定檔中的編碼方式,將“utf-8”編碼方式改為“GB2312”編碼方式解決上面的問題,應該是可以的,大家可以試一下,告訴我結果。

在ASP.NET中我們一般通過如下方法清除COOKIES資訊:

Sub CleanCookies()
Dim i As Integer
Dim cookie As System.Web.HttpCookie
For i = 0 To System.Web.HttpContext.Current.Request.Cookies.Count - 1
cookie = System.Web.HttpContext.Current.Request.Cookies(i)
System.Web.HttpContext.Current.Response.Cookies(CStr(cookie.Name)).Value = ""
System.Web.HttpContext.Current.Response.Cookies(CStr(cookie.Name)).Expires = DateAdd(DateInterval.Day, -1, Now)
Next
End Sub

但在通過以上方法清除COOKIES資訊並再次登入時ASP將不能讀取ASP.NET的COOKIES,其原因不知為何,但在上面的清除COOKIES資訊方法中加入以下語句可解決無法正確清除COOKIES資訊的問題:

System.Web.HttpContext.Current.Response.Cookies.Clear()

以上為本人在工作中的一些小小經驗總結,可能會有不準確的地方,望大家批正!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.