zoukankan      html  css  js  c++  java
  • 关于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就会获取不到了。所以这是要注意的一点。

  • 相关阅读:
    BOI 2002 双调路径
    BOI'98 DAY 2 TASK 1 CONFERENCE CALL Dijkstra/Dijkstra+priority_queue/SPFA
    USACO 2013 November Contest, Silver Problem 2. Crowded Cows 单调队列
    BOI 2003 Problem. Spaceship
    USACO 2006 November Contest Problem. Road Blocks SPFA
    CEOI 2004 Trial session Problem. Journey DFS
    USACO 2015 January Contest, Silver Problem 2. Cow Routing Dijkstra
    LG P1233 木棍加工 动态规划,Dilworth
    LG P1020 导弹拦截 Dilworth
    USACO 2007 February Contest, Silver Problem 3. Silver Cow Party SPFA
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6421870.html
Copyright © 2011-2022 走看看