ASP.NET與ASP互通COOKIES的一點經驗
更新時間:2010年03月10日 23:04:59 作者:
ASP與ASP.NET互相整合時,其中文COOKIES信息無法被互通共享,當使用ASP.NET寫入中文COOKIES信息后,使用ASP進行讀取,讀出來的卻是亂碼,而非中文。
在微軟推出.NET并進行了大規(guī)模的推廣普及之后,ASP.NET逐漸進入了信息化系統開發(fā)的主流。但與此同時,而用ASP開發(fā)的舊系統面則臨被整合,這時,面臨一個問題:ASP與ASP.NET互相整合時,其中文COOKIES信息無法被互通共享,當使用ASP.NET寫入中文COOKIES信息后,使用ASP進行讀取,讀出來的卻是亂碼,而非中文。
后來通過查找資料,不停地實踐,終于找到了問題的根源,中文COOKIES信息在ASP中無法被正確讀取得原因為其中文編碼格式不同。
開發(fā)項目Web.config配置文件中有如下信息:
<!-- 全球化此節(jié)設置應用程序的全球化設置。 -->
<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()
以上為本人在工作中的一些小小經驗總結,可能會有不準確的地方,望大家批正!
后來通過查找資料,不停地實踐,終于找到了問題的根源,中文COOKIES信息在ASP中無法被正確讀取得原因為其中文編碼格式不同。
開發(fā)項目Web.config配置文件中有如下信息:
<!-- 全球化此節(jié)設置應用程序的全球化設置。 -->
<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()
以上為本人在工作中的一些小小經驗總結,可能會有不準確的地方,望大家批正!
您可能感興趣的文章:
- asp.net 操作cookie的簡單實例
- ASP.NET之Response.Cookies.Remove 無法刪除COOKIE的原因
- ASP.NET筆記之頁面跳轉、調試、form表單、viewstate、cookie的使用說明
- asp.net中使用cookie與md5加密實現記住密碼功能的實現代碼
- asp.net Cookie值中文亂碼問題解決方法
- Asp.net內置對象之Cookies(簡介/屬性方法/基本操作及實例)
- Asp.net cookie的處理流程深入分析
- asp.net關于Cookie跨域(域名)的問題
- asp.net中的cookie使用介紹
- ASP.NET下對cookies的操作實現代碼
- asp.net(C#)跨域及跨域寫Cookie問題
- ASP.NET獲取不到JS設置cookies的解決方法
- asp.net頁面狀態(tài)管理cookie和服務器狀態(tài)管理Session
- asp.net下cookies操作完美代碼
- Asp.net 基于Cookie簡易的權限判斷
- asp.net各種cookie代碼和解析實例
相關文章
C#中的Equals、RefrenceEquals和==的區(qū)別與聯系
C#中判斷兩個對象是否相等有Equals、RefrenceEquals和==三種,其中==為運算符,其它兩個為方法,而Equals又有兩種版本,一個是靜態(tài)的,一個是虛擬的,詳細了解可以參考本文2012-12-12asp.net下URL網址重寫成.html格式、RSS、OPML的知識總結
asp.net下URL網址重寫成.html格式、RSS、OPML的知識總結...2007-09-09在DataTable中執(zhí)行Select("條件")后,返回DataTable的方法
在DataTable中執(zhí)行Select("條件")后,返回DataTable的方法...2007-09-09