asp.net Cookie值中文乱码问题解决方法

来源:脚本之家  责任编辑:小易  

你要明白,一个Request都会伴随着一个Response 你在点击按钮以后,会产生一个Request,此时会带上你的Cookie 产生一个请求. 然后在事件中,写入了Cookie,然后你再输出的,还是在你写Cookie之前带来的Cookie 所以,你第四次点击,带过来第三次的Cookie,

cookie里面不能写中文,是由于cookie先天的编码方式造成的。所以需要有一种中间编码来过渡。 URLEncode是最好的选择。

我们以asp.net为例,代码如下:

获取cookie,是回去客户端的cookie。 response是服务端输出至客户端的信息集合 request是指客户端信息集合 Request.Cookices试试

设置Cookie时

int id = 1; HttpCookie cookie = new HttpCookie("ID"); DateTime dt = DateTime.Now; TimeSpan ts = new TimeSpan(1, 0, 0); cookie.Expires.Add(ts); cookie.Values.Add("ID", id.ToString());//注意values.Add和Value=的区别 Response.Appen

复制代码 代码如下:

理论上是找不到的。。 你打开连接后 没有创新新的cookie 那么你给URL的cookie就是NULL值 复制到游览器的话 应该是你cookie还在没有超时失效时用的吧

HttpCookie cookie = new HttpCookie("name", System.Web.HttpContext.Current.Server.UrlEncode("脚本之家"));

HttpCookie cookie = HttpContext.Current.Request.Cookies["info"]; // cookie = null; if (cookie == null ) { cookie = new HttpCookie("Info"); cookie["CityID"] = HttpContext.Current.Server.UrlEncode(cityID); cookie["CityName"] = Ht

Response.Cookies.Add(cookie);读取Cookie时:

粮票是困难时期的有价证券,在当时,人们每月必须拿着粮票到粮食公司去,购买大米或面粉,当然,出差在外,系带粮票更加方便,也就是说,凡是粮食制品,都要粮票。粮票距今虽然几十年了,而在我们当地,崭新的全国粮票或地方粮票,都不值价,也不值得收藏,

if (Request.Cookies["name"] != null)

这就是作者在书里暗示的东西了。。。真假猴王就是一个人,都是孙悟空。这里先说一下,当年猴王在菩提祖师座下学艺,开始时候好高骛远,被菩提祖师痛斥然后在后脑勺上拍了三下,是个暗号,然后猴王半夜三更到菩提祖师修炼之处接受真传。。。当时菩提说过一句话,法不传六耳。那么回到问题,六耳猕猴的事情,当时二心猿大打出手,难分真假,下到地府,问谛听谁是真假,谛听是知道所有事情的,那么直接点出谁真谁假不就行了,然而谛听和地藏王菩萨的对话在原文中是这样的:俯伏在地,须臾抬起头来,对地藏道:\"怪名虽有,但不可当面说破,又不能助力擒他。\"地藏道:\"当面说出便怎么?\"谛听道:\"当面说出,恐妖精恶发,搔扰宝殿,致令

{

Response.Write(System.Web.HttpContext.Current.Server.UrlDecode(Request.Cookies["name"].Value));

您好,很高兴回答您的问题!现在普遍每个人微信上都会有好几个群,而加群或者建群的方法也有很多。下面我给大家介绍几个详细的加群和建群的方法。希望大家点赞关注支持我。加群的方法只有被邀请,无法自助申请加入我先给大家介绍几个微信建群的方法。1.面对面建群,如果想拉对方建群那我们可以选择私密群组。2.直接拉人建群,把对应的人选直接拉进群聊即可3.二维码扫码进群,不过二维码有效期只有半小时,会实时更新的二维码。2017微信官方团队发布群聊新规定。1.群聊30人以下拉群聊不需要被拉者验证。2.当群聊人数达到100之后只能通过被邀请进群的方式进行加群。3.群聊人数最多限定500人,超于500人无法加入群以上就

}

注意:编码和解码要一致

在一次酒桌上各位朋友都当着我老领导的面大势夸奖我表扬我,可谓好话说尽了,突然老领导站起来端了满满一大杯酒,对大家说,你们讲的都不对,他最大的优点两个字,他顿了顿,一字一字的说,耐……抗!大伙听了都目瞪可呆,不解其意,只有我心里明白他说的这条优点的含义和各自酸甜苦辣。多年前老领导是我直接上司,由于历史上的一些误会和后来我工作上的搭当是老领导的同学,使得领导一直对我有成见和偏见,老领导是一个很强势的人,说话算数,说一不二。我的个性也是很强,不会轻易低头,也不会为了升官发财去出卖人格,有一次为了人事安排,老领导跟我打电话摔坏了三部电话单机,并在多次场合扬言要把我搞掉!不少朋友都为我捏把汗,有的劝我主

复制代码 代码如下:

理论上是找不到的。。 你打开连接后 没有创新新的cookie 那么你给URL的cookie就是NULL值 复制到游览器的话 应该是你cookie还在没有超时失效时用的吧

System.Web.HttpContext.Current.Server.UrlDecode 和 System.Web.HttpContext.Current.Server.UrlEncode

System.Web.HttpUtility.UrlDecode 和 System.Web.HttpUtility.UrlEncode

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

asp.net中cookie中文乱码

是的,因为Cookie自动提交时没做转码处理,导致提交上去后,获取变成乱码,

你可以先UrlEncode(中文),再保存到Cookie里,

从Cookie里取数据,则用UrlDecode去解码

asp.net cookie输出时中文乱码问题

修改xml编码,不然输出字段为基数的都是乱码,最好cookie里存字符或数字

asp.net设置cookies后,用asp读取出现乱码

这个是ASP.NET,ASP也应该差不多

读取cookies中文出现乱码

解决方法:添加cookies时进行编码,读取时进行解码

添加:

HttpCookie myCookie= new HttpCookie("cooke2_Name");

//编码

myCookie.Value = HttpContext.Current.Server.UrlEncode("cooke2_value");

myCookie.Expires = DateTime.Now.AddDays(1);

Response.Cookies.Add(myCookie);

读取:

//解码

string strCookies= HttpContext.Current.Server.UrlDecode(Request.Cookies["cooke1_Name"].value);追问不行,除了cookies中的数字以外,全是乱码,ASP.NET可以用ASP的,ASP不可以用ASP.NET的,郁闷

关于C#asp.net中的cookies乱码问题

传递之前先编码,获取的时候再解码更多追问追答追问我把webconfig的gb2312改成utf-8,连登陆界面都成了乱码。

您说的传递之前是什么编码格式,我用vs找了整个系统,貌似没找到,都是直接使用request.cookies代码。我该怎么办?他都是直接request的,没有先编码,就是直接request用户输入的登陆名称,在webconfig里找到。

我想把gb2312改成utf-8试试?追答传递之前是什么编码格式?

ASP.NET里面cookie的值,点击同一个按钮显示不同文字

URL、Session、Cookies、Server.Transfer、Application和跨页面传送。

【分析】

本题考查面试者对ASP.NET中多页面传值的理解是否全面。因为ASP.NET的页面表单提交到自身,完成回传的功能,所以默认情况下不能使用POST方式进行多页面传值。关于这些传值方式的分析如下所示。

1.URL传值

这是经典的传值方式,这种方法的使用非常简单,不过所传递的值是会显示在浏览器的地址栏上的,而且不能传递对象。所以这种方法一般用于传递的值少且安全性要求不高的情况下。在*.aspx页面开发中可以使用超级链接文本进行传值,如以下代码所示。

asp:HyperLink runat="server" ID="HpLink"

NavigateUrl="~/GetValues.aspx?urlvalue1=intelurlvalue2=amd"URL传值/asp:HyperLink

以上链接文本将页面跳转到GetValues.aspx页面,并且通过URL传递urlvalue1变量和urlvalue2变量,其值分别为intel和amd。在*.cs的服务器端方法中也可以调用HttpResponse对象的Redirect方法,将浏览器端重定向到新页面并通过URL传值,如以下代码所示。

Response.Redirect(“~/GetValues.aspx?urlvalue1=intelurlvalue2=amd”);

2.Session传值

这种方法将每份数据存储于服务器变量中,可以传递比较多的数据,并且安全性较高,所以常用于用户身份的验证功能中。不过,Session变量如果存储过多的数据会消耗过多的服务器资源,编程者在使用时应该慎重,其使用方法如以下代码所示。

Session["SessionValue"] = “ATI”;

//也可以用索引存储

Session[0] = “ATI”;

//在其他页面的服务器端方法中取值方式为:

string str = Session["SessionValue"].ToString();

//也可以用索引获取

string str = Session[0].ToString();

Session的可在应用程序的多个页面中以名称/值对的方式共享,直到浏览用户关闭自己的浏览器或者服务器Session超时(可设置,默认为20分钟)。

3.Cookie传值

Cookie是一种比较特殊的数据存储方式,因为这种方式将数据存储于浏览用户的电脑中,以文本文件的形式存在于磁盘中。这种方式非常有意思,很多登录系统就是利用Cookie实现用户自动登录。即用户登录一次的登录信息将被写入到用户电脑的Cookie文件中,下次登录时,网站自动读取该Cookie完成身份验证。通过Cookie传递数据虽然很方便,保存时间可以自由设置,但是安全性不高,编程者不应过于依赖Cookie,而应采用结合的方式完成敏感数据的存储。

ASP.NET中操作Cookie的主要类型位于System.Web命名空间下,分别为HttpCookie、HttpResponse以及HttpRequest。HttpCookie可建立和操作独立Cookie的安全类型,访问HttpResponse和HttpRequest的Cookies属性可以获取HttpCookieCollection集合对象,以读取或添加HttpCookie对象。添加Cookie的方法如以下代码所示。

//创建一个HttpCookie 对象,向构造函数传递名称值

HttpCookie ck = new HttpCookie("CookieValue");

//设置ck的“Value”属性(值)

ck.Value = “Cookie值”;

//设置ck的过期时间为当前时间加上360s,即6分钟后失效

ck.Expires = DateTime.Now.AddSeconds(360);

//设置ck有效范围(域*)

ck.Domain = ;;

//将ck添加至HttpCookieCollection对象

Response.Cookies.Add(ck);

//也可为以下方法添加

//Response.AppendCookie(ck);;

读取用户的Cookie则更为简单,只需根据名称读取HttpCookieCollection集合对象中的子项即可,如以下代码所示。

string str = Request.Cookies["CookieValue"].Value;

除此之外,还可以利用一个HttpCookie存储多个名称/值对形式的Cookie信息,如以下代码所示。

HttpCookie ck = new HttpCookie("CookieValue");

//以名称/值对的方式添加多个Cookie信息

ck.Values.Add("value1", “one”);

ck.Values.Add("value2", "two");

//设置ck的过期时间为当前时间加上100年,即100年后失效

ck.Expires = DateTime.Now.AddYears(100);

//通过以下两种方法添加

Response.Cookies.Add(ck);

//Response.AppendCookie(ck);

读取这些Cookie如以下代码所示。

string str = "值1:"+Request.Cookies["CookieValue"].Values["value1"];

str += "值2:" + Request.Cookies["CookieValue"].Values["value2"];

说明:多数浏览器支持最多可达4096字节的Cookie,如果要将为数不多的几个值保存到用户计算机上,浏览器还*了每个站点可以在用户计算机上保存的Cookie数量。大多数浏览器只允许每个站点保存20个Cookie。如果试图保存更多的Cookie,则最先保存的Cookie就会被删除。还有些浏览器会对来自所有站点的Cookie总数作出*,这个*通常为300个。用户可以设置自己的浏览器,拒绝接受Cookie,这种情况下只能结合其他的数据存储方式。

4.Server.Transfer传值

这个方法的步骤相对较多,使用该方法编程者可以在另一个页面以公开对象属性的方式来存取值,使用这种方法是面向对象的。该方法的代码编写并不复杂,首先通过定义一个public权限的属性,该属性可返回所需传递的值。然后在第两个页面中,使用Context.Handler属性来获得前一个页面实例对象的引用,即可通过访问自定义的属性获取需要的值。

假设SendValues.aspx页面为传递数据的页面,在SendValues.aspx.cs的页面类中定义一个public属性,通过get直接返回需要传递的值(可为页面中某个服务器控件的属性值)。

public string TransferData

{

get

{

return "VIA";

}

}

在SendValues.aspx.cs的某个方法(如Button控件的Click事件处理方法)中调用HttpServerUtility对象的Transfer方法,如以下代码所示。

Server.Transfer("~/GetValues.aspx");

假设GetValues.aspx为第二个页面,在GetValues.aspx.cs的Page_Load方法中接收前一个页面所传递的值,方法如以下代码所示。

//定义SendValues类型的变量SV_Page

SendValues SV_Page;

//访问HttpContext对象的Handler属性,将值转换为SendValues类型,引用赋值给SV_Page

SV_Page = (SendValues)Context.Handler;

//SV_Page即为SendValues.aspx页面类的对象,直接获取其TransferData属性值

string str = SV_Page.TransferData;

可见,这种方法对于有面向对象基础的编程者而言非常容易理解。不过页面间如果需要传递数量比较多的值,这种方法需要定义过多的属性,略显繁杂。编程者还可以直接使用HttpContext对象的“Iterms”属性添加多项名称/值对的数据,在SendValues.aspx.cs调用HttpServerUtility对象的Transfer方法的某个方法中,修改代码如下所示。

Context.Items["value1"] = "one";

Context.Items["value2"] = "two";

在GetValues.aspx.cs的Page_Load方法中接收前1个页面所传递的值,修改代码如以下代码所示。

string str = "值1:" + Context.Items["value1"].ToString();

str += "值2:" + Context.Items["value2"].ToString();

5.Application传值

严格地说应该是通过HttpApplication对象在服务器端生成一个状态变量来存储所需的信息,该HttpApplication对象变量的可用范围覆盖整个WEB应用程序。所以该对象一般存储一些要公布的信息,如在线人数等,而对于那些涉及用户个人的敏感数据则不用这种方法存储。HttpApplication对象有两个常用的方法,即Lock和UnLock方法,可用于处理多个用户对存储在Application变量中的数据进行写入的问题。Lock方法锁定全部的Application变量,从而阻止其他用户修改Application对象的变量值,UnLock方法则解除对HttpApplication对象变量的锁定。通过HttpApplication对象传值的方法和Session比较相似,在页面类的某个方法中编写代码如下所示。

Application["a"] = "微软公司";

Application["b"] = "苹果公司";

Application["c"] = “Mac”;

以上代码很轻松地将三个字符串值保存在HttpApplication对象的变量中了,并且这些变量是整个程序共享的,其他用户通过相应的页面同样可以获取。获取这些变量的方法如以下代码所示。

Application.Lock();

string str = "值1:" + Application["a"];

str += "值2:" + Application["b"];

str += "值3:" + Application["c"];

Application.UnLock();

注意:虽然使用方式和Session相似,但是Session是对于每个单独的用户,当该用户关闭浏览器,则Session失效。HttpApplication对象存储的变量是针对所有访问程序的用户,即使有用户关闭了浏览器,变量的值不会丢失。

6.跨页面传送

跨页面传送和调用HttpServerUtility对象的Transfer方法有相似之处,不过效率更高。因为调用HttpServerUtility对象的Transfer方法是基于服务器的方法,而跨页面传送是基于浏览器端的。这个方法主要是设置控件的“PostBackUrl”属性,使该控件(如Button)操作后转向指定页面,并且这个指定页面可以直接获取前一个页面的所有控件对象及其属性值。假设第一个页面为SendValues.aspx,在该页面中(非*.cs代码文件)添加两个控件,设置如以下代码所示。

asp:TextBox runat="server" ID="PbValue" Text="Geforce TX280"/asp:TextBox

asp:Button runat="server" ID="btn6" Text="跨页面传送方式" PostBackUrl="~/GetValues.aspx" /

以上代码中,TextBox控件的“Text”属性为“Geforce TX280”,这是所需要传送的值。而Button控件的“PostBackUrl”属性指定了GetValues.aspx页面,该页面即可接收所需传递的值。在GetValues.aspx.cs的Page_Load方法中,编写以下代码。

//PreviousPage为向当前页面传输控件的页面

if (PreviousPage != null)

{

//从PreviousPage容器中搜索“ID”为PbValue的控件,并转换为TextBox类型

TextBox tb = (TextBox)PreviousPage.FindControl("PbValue");

//如果tb不是空引用

if (tb != null)

{

//将tb的“Text”属性值给str变量

string str = tb.Text;

}

}

以上代码轻松获得了前一个页面中TextBox控件的“Text”属性值,这种方法比调用HttpServerUtility对象的Transfer方法更加快捷,并减少了处理步骤。

以上为常用的页面间传值方法,如果有特殊需要,还可以使用其他方法,例如通过数据库存储临时数据等

  • 本文相关:
  • .net从服务器下载文件中文名乱码解决方案
  • .net中文乱码的解决方法分享
  • asp.net导出excel显示中文乱码的解决方法
  • asp.net url传递后地址栏乱码(中文超过两个汉字)
  • asp.net中request.form中文乱码的解决方法
  • asp.net url中包含中文参数造成乱码的解决方法
  • asp.net 中文字符串提交乱码的解决方法
  • js与asp.net 中文乱码问题
  • asp.net下cookies的丢失和中文乱码
  • .net获取url中文参数值的乱码问题解决方法总结
  • asp.net中实现中文简/繁体自动转换的类
  • asp.net 客户端浏览器缓存的http头介绍
  • asp.net 用户控件中图片及样式问题
  • asp.net运行原理 详解
  • asp.net mvc signalr来做实时web聊天实例代码
  • asp.net cookie清除的代码
  • .net使用自定义类属性实例
  • .net发送邮件的实现方法示例
  • asp.net中如何实现水印
  • asp.net gridview使用大全(分页实现)
  • asp.net中cookie中文乱码
  • asp.net cookie输出时中文乱码问题
  • asp.net设置cookies后,用asp读取出现乱码
  • 关于C#asp.net中的cookies乱码问题
  • ASP.NET里面cookie的值,点击同一个按钮显示不同文字
  • asp.net cookie问题
  • asp.net cookie的值获取不到?
  • ASP.NET(C#)使用Cookies时,获取cookies值的问题。
  • Asp.Net 读取cookie的问题
  • asp.net 一般处理程序 怎么获取 cookie
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved