关于Cookie中存放于读取中文字符的问题,以及删除Cookie

近来,做项目的过程之中,用到了Cookie中存放中文字符的问题,平时不怎么用,一旦用到了还真是让人恶心!

由于Cookie是存放在本地的,而我们是通过服务器端向本地写数据,那么网络的编码格式就会影响了汉字的正常存储导致汉字乱码。

通常在给汉子进行编码时有两种常用的方法:HttpUtility.UrlEncode Server.UrlEncode,虽然编码/解码成对使用没问题,但是毕竟是两种方法,总该是有区别的,网上查了一下,区别如下:

1、HttpUtility.UrlEncode(向Cookie中写时用),HttpUtility.UrlDecode(从Cookie中读时用)是静态方法,而Server.UrlEncode(写),Server.UrlDecode(读)是实例方法。

例如:

2、Server是HttpServerUtility类的实例,是System.Web.UI.Page的属性。
3、用HttpUtility.UrlEncode编码后的字符串和用Server.UrlEncode进行编码后的字符串对象不一样

Server.UrlEncode 可以根据你页面定义好的编码方式进行编码。

而 HttpUtility.UrlDecode则默认以utf8来编码。 不然你需要自己指定编码方式:

Encoding gb2312= Encoding.GetEncoding("gb2312");

string v5= HttpUtility.UrlEncode("中文汉字", gb2312);

而 Server.UrlDecode则默认调用web.config中<globalization />节点中指定来编码

<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" />

string v3= Server.UrlEncode("中文汉字");

这两种方式,在不使用web.config默认的编码方式时,HttpUtility.UrlEncode比较好用,但是不方便;如果是使用web.config统一编码,则Server.UrlDecode比较好。另外就是,如果是下载文件而定义编码方式,最好使用HttpUtility.UrlEncode

二、删除Cookie的操作

找出要删除的cookie

c.setMaxAge(0);  设置其时长为0,让其立即过期
response.addCookie(c);  执行添加

注意:在做项目的过程中,遇到了一个问题,当执行删除Cookie后,我没有跳转到客户端,而是直接跳转到servlet中,在转发到其他页面,(所以虽然执行了删除Cookie的代码,但是,实际上Cookie并没有被删除,因为Cookie是客户端的数据,而我并没有在客户端执行之一操作)

所以在执行删除Cookie的代码之后,要重定向到客户端之后,Cookie才能被删除

补充:在结合Cookie和Session使用时,当删除Cookie时要注意,如果删除了JSESSIONID。那么在本次会话中session就会获取不到了。所以这是要注意的一点。

原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6421870.html