解决Asp.net 读取cookie中保存的中文字符乱码问题
前言
cookie储存中文是会乱码的,在使用cookie储存中文的时候需要使用UrlEncode编码,同时读取cookie中的中文时需要使用功能UrlDecode解码。
正文
Cookie是保存在客户端硬盘或内存中的一小段文本信息,如网站、用户、会话等有关的信息。它与网站关联,而不是与特定的页面关联。可以在客户端修改Cookie设置和禁用Cookie。当用户的浏览器关闭了对Cookie的支持,但又要使用Cookie时,只需在Web.config文件的<system.web>元素中加入以下语句<sessionState cookieless=“AutoDetect”>或 <sessionState cookieless=“UseUri”>
建立Cookie
方法一:
Response.Cookies[“Name”].Value=“zhangsan”;
方法二:
HttpCookie cookie = new HttpCookie(“Name”);
cookie.Value = “zhangsan”;
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
获取Cookie
Request.Cookies[“Name”].Value
在本实例中,用户访问Cookie.aspx时,若在Cookie中已有用户信息则显示欢迎信息,否则被重定向到CookieLogin.aspx中,这意味着当Cookie中未包含用户信息时,就不能访问Cookie.aspx,从而实现了限制页面访问的目的。
Cookie.aspx文件如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Cookie.aspx.cs" Inherits="Chap6_Cookie" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>利用Cookie限制页面访问</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblMsg" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
Cookie.aspx.cs文件如下
using System;
public partial class Chap6_Cookie : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Cookies["Name"] != null)
{
//lblMsg.Text = System.Web.HttpUtility.UrlDecode(Request.Cookies["Name"].Value,System.Text.Encoding.GetEncoding("UTF-8")) + ",欢迎您回来!";
lblMsg.Text = Server.UrlDecode(Request.Cookies["Name"].Value) + ",欢迎您回来!";
}
else
{
Response.Redirect("~/CookieLogin.aspx");
}
}
}
CookieLogin.aspx文件如下
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CookieLogin.aspx.cs" Inherits="Chap6_CookieLogin" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>在客户端写入Cookie</title>
</head>
<body>
<form id="form1" runat="server">
<div>
用户名:<asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
密码:<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox><br />
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="确定" />
</div>
</form>
</body>
</html>
CookieLogin.aspx.cs文件如下
using System;
using System.Web;
public partial class Chap6_CookieLogin : System.Web.UI.Page
{
protected void btnSubmit_Click(object sender, EventArgs e)
{
//实际工程需与数据库中存储的用户名和密码比较
if (txtName.Text == "张三" && txtPassword.Text == "111")
{
HttpCookie cookie = new HttpCookie("Name");
//cookie储存中文的时候使用特定的程序编码中文,以下两种方式均可
//cookie.Value = HttpUtility.UrlEncode("张三",System.Text.Encoding.GetEncoding("UTF-8"));
cookie.Value = Server.UrlEncode("张三");
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
Response.Redirect("~/Cookie.aspx");
}
}
}
后记
估计学校开学得期中考试完之后了