学习网考试学习资料

Gzu521.com

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

.Net教程   点击:次   发布时间:2006-6-30   【字体: 】   来源:Gzu521.com
贵 州 学 习 网
   在微软推出.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() 

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

责任编辑:gzu521

网络编程分类
ASP教程
.Net教程
Java教程
PHP教程
数据库基础
ACCESS教程
SQL Server教程
MySQL教程
Oracle教程
分类推荐信息
更多...
大类最新文章
更多...