ASP.NET中Cookie的使用指南:创建、读写与过期控制

陈默
陈默
发布时间:2026-10-15 | 7人浏览过
原创

在ASP.NET Web开发中,Cookie是维持会话状态的重要工具。本文详细介绍如何使用C#中的HttpCookie类来创建、读取、设置过期时间和销毁Cookie,并结合实际场景演示了如何安全地实现登录验证后的用户状态保持。

Cookie机制简述

Cookie是一种由Web服务器发送到用户浏览器并保存在本地的小型文本文件。它允许网站存储少量数据(通常限制在4KB左右),以便在后续请求中识别用户。当用户再次访问该网站时,浏览器会自动将相关Cookie发送回服务器,从而实现个性化显示或免密登录等功能。由于Cookie存储在客户端,其内容可能面临安全风险,因此建议对敏感信息进行加密处理。

查看Cookie存储位置

不同浏览器的Cookie存储路径有所差异,通常在系统硬盘的特定文件夹中。下图展示了某浏览器中Cookie文件的实际存储路径:

核心操作:创建、读取与过期控制

第1步:创建并写入Cookie

目的:向客户端浏览器发送一个简单的键值对Cookie。

入口:ASP.NET页面的后台代码(Code-behind)。

动作:实例化 HttpCookie 对象,并将其添加到 Response.Cookies 集合中。

复制代码 代码如下:
HttpCookie cookie = new HttpCookie("id", "234"); // 创建cookie实例,键为id,值为234
Response.Cookies.Add(cookie); // 将创建的cookie写入响应头,发送给浏览器端

说明:此时浏览器接收到了名为“id”的Cookie。若需读取,可通过 Request.Cookies["id"].Value 获取。

第2步:读取Cookie中的数据

目的:验证是否成功接收并读取客户端传来的Cookie值。

入口:ASP.NET页面加载事件或处理逻辑中。

动作:通过 Request 对象获取指定Key的Cookie值。

复制代码 代码如下:
HttpCookie cookie = Request.Cookies["id"]; // 从请求中获取名为id的cookie
if (cookie != null)
{
    Response.Write(cookie.Value); // 输出读取到的值,例如: 234
}

注意:直接暴露原始数据存在安全隐患。若必须存储重要信息,请务必先进行加密,再存入Cookie。

第3步:设置Cookie有效期

目的:定义Cookie的生命周期,避免产生垃圾文件或长期占用资源。

入口:创建Cookie实例后,赋值给 Expires 属性。

动作:计算相对时间或绝对时间并赋值。

复制代码 代码如下:
HttpCookie cookie = new HttpCookie("id", "234");
// 设置5个月后过期
cookie.Expires = DateTime.Now.AddMonths(5);
Response.Cookies.Add(cookie); // 带过期时间的cookie被写入
Response.Write(Request.Cookies["id"].Value); // 可正常读取

第4步:销毁/删除Cookie

目的:使客户端立即清除指定的Cookie。

原理:无法直接从客户端删除Cookie,但可以通过服务器端发送一个已过期(早于当前时间)的相同名称的Cookie来覆盖原Cookie,从而使其失效。

动作:将 Expires 设置为过去的某个时间点。

复制代码 代码如下:
HttpCookie cookie = new HttpCookie("id", "234");
// 之前的步骤... 
// 若要删除此cookie:
cookie.Expires = DateTime.Now.AddDays(-5); // 设置为过去的时间
Response.Cookies.Add(cookie); // 发送删除指令

实战案例:实现“记住我”功能

以下代码演示了一个简化的登录流程:如果用户勾选了“记住我”,则保存账号密码至Cookie(设为2天后过期);若未勾选,则仅作为普通登录处理。若已有Cookie,则自动重定向至主页。

复制代码 代码如下:
<body>
<form id="form1" method="post" action="rembPage.aspx">
<div>
    帐号: <input type="text" name="userName" /><br />
    密码 :<input type="password" name="pass" /><br />
    记住我: <input type="checkbox" value="rem" name="sele1" /><br />
    <input type="submit" value="登录" />
</div>
</form>
</body>
后台逻辑 Code-Behind
protected void Page_Load(object sender, EventArgs e)
{
    // 检查是否已存在有效的Cookie
    if (Request.Cookies["userName"] == null || Request.Cookies["passWord"] == null)
    {
        // 若无Cookie,处理表单提交
        if (Request.Form["userName"] != null && Request.Form["pass"] != null)
        {
            String userName = Request.Form["userName"];
            String userPassWord = Request.Form["pass"];

            // 假设简单的身份验证逻辑
            if (userName == "admin" && userPassWord == "123")
            {
                if (Request.Form["sele1"] != null) // 用户勾选了“记住我”
                {
                    // 创建用户名Cookie
                    HttpCookie cookieUserName = new HttpCookie("userName", userName);
                    // 创建密码Cookie (注意:生产环境建议加密存储!)
                    HttpCookie cookiePassWord = new HttpCookie("passWord", userPassWord);

                    // 设置过期时间
                    cookieUserName.Expires = DateTime.Now.AddDays(2); // 相对时间:2天
                    cookiePassWord.Expires = new DateTime(2099, 1, 1); // 绝对时间示例

                    // 写入Cookie
                    Response.Cookies.Add(cookieUserName);
                    Response.Cookies.Add(cookiePassWord);

                    Response.Redirect("1.aspx"); // 跳转至目标页
                }
                else
                {
                    Response.Redirect("1.aspx"); // 不记住则直接跳转,但不存Cookie
                }
            }
        }
    }
    else
    {
        // 若已存在Cookie,认为用户已登录,直接跳转
        Response.Redirect("1.aspx");
    }
}

风险提示:上述示例中将明文密码存入Cookie仅为教学演示。在实际项目中,**严禁**以明文形式存储密码。应使用Token机制或加密算法保护敏感数据,或至少只存储经过哈希处理的标识符。

以上就是ASP.NET中Cookie使用的详细内容,更多关于C# Web开发和HttpCookie的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表