前言

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");
        }
    }
}

后记

估计学校开学得期中考试完之后了