ASP.NET与ASP互通COOKIES的一点经验

 更新时间:2010年03月10日 23:04:59   作者:  
ASP与ASP.NET互相整合时,其中文COOKIES信息无法被互通共享,当使用ASP.NET写入中文COOKIES信息后,使用ASP进行读取,读出来的却是乱码,而非中文。
在微软推出.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()

  以上为本人在工作中的一些小小经验总结,可能会有不准确的地方,望大家批正!

相关文章

  • Asp.Net Core Identity 隐私数据保护的实现

    Asp.Net Core Identity 隐私数据保护的实现

    这篇文章主要介绍了Asp.Net Core Identity 隐私数据保护的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • asp.net+js实现批量编码与解码的方法

    asp.net+js实现批量编码与解码的方法

    这篇文章主要介绍了asp.net+js实现批量编码与解码的方法,涉及前端的jquery post提交及后台C#处理实现批量编码与解码的相关技巧,需要的朋友可以参考下
    2016-03-03
  • 如何在ASP.NET Core中使用Session的示例代码

    如何在ASP.NET Core中使用Session的示例代码

    这篇文章主要介绍了如何在ASP.NET Core中使用Session的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • asp.net源程序编译为dll文件并调用的实现过程

    asp.net源程序编译为dll文件并调用的实现过程

    这篇文章主要介绍了asp.net源程序编译为dll文件并调用的实现过程,非常有实用价值,需要的朋友可以参考下
    2014-07-07
  • .NET Core使用Redis实现创建分布式锁

    .NET Core使用Redis实现创建分布式锁

    分布式锁一般用于确保在分布式系统中,同一时间只有一个进程可以执行某段代码,本文将通过.NET Core使用Redis实现创建分布式锁,感兴趣的可以了解下
    2025-01-01
  • 给Repeater控件里添加序号的5种才常见方法介绍

    给Repeater控件里添加序号的5种才常见方法介绍

    Repeater是我们经常用的一个显示数据集的数据控件那么我们该怎么为Repeater控件添加序号呢?下面编辑为大家介绍几种常用的为Repeater控件添加序号的方法
    2013-09-09
  • ASP.NET读取配置文件的多种方式详解

    ASP.NET读取配置文件的多种方式详解

    ASP.NET Core 是一个模块化、高性能的框架,它使用依赖注入来构建应用程序的各个组件,在 ASP.NET Core 中,配置文件扮演着至关重要的角色,下面我们就来看看ASP.NET读取配置文件有哪些方式吧
    2025-02-02
  • 设置ASP.NET页面不被缓存(客户端/服务器端取消缓存方法)

    设置ASP.NET页面不被缓存(客户端/服务器端取消缓存方法)

    设置页面不被缓存:客户端取消缓存、服务器具端取消缓存的具体实现代码如下感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-06-06
  • ABP入门系列之分页功能的实现

    ABP入门系列之分页功能的实现

    本节主要讲解了如何使用ABP进行后台分页,并顺带讲解了ABP后台分页逻辑的实现方式。同时也演示了如何使用X.PagedList进行前端分页
    2017-03-03
  • 时间轻松学会.NET Core操作ElasticSearch7的方法

    时间轻松学会.NET Core操作ElasticSearch7的方法

    这篇文章主要介绍了时间轻松学会.NET Core操作ElasticSearch7,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论