欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

APS.NET Cookie

程序员文章站 2023-11-24 23:24:52
cookie 提供了一种在 web 应用程序中存储用户特定信息(如历史记录或用户首选项)的方法。cookie 是一小段文本,伴随着请求和响应在 web 服务器和客户端之间来回传输。cookie 包含...

cookie 提供了一种在 web 应用程序中存储用户特定信息(如历史记录或用户首选项)的方法。cookie 是一小段文本,伴随着请求和响应在 web 服务器和客户端之间来回传输。cookie 包含每次用户访问站点时可由 web 应用程序读取的信息。

 

1. 写cookie

管理客户端计算机上的 cookie。使用 httpresponse 对象可向客户端发送 cookie,该对象会公开称为 cookies 的属性。任何需要 web 应用程序发送到浏览器的 cookie 都必须添加到此集合中。编写新 cookie 时,必须指定 name 和 value。每个 cookie 必须有一个唯一的名称,这样在以后当浏览器随同请求发送 cookie 时,web 应用程序就可以标识该 cookie。

默认情况下,cookie 由位于同一域中的所有页面共享,但可以通过设置 cookie 的 path 属性将 cookie 限制在网站中的特定子文件夹。若要允许应用程序的所有文件夹中的所有页面都检索一个 cookie,请从应用程序根文件夹中的页面设置该 cookie,但不要设置 path 属性。
如果不指定该 cookie 的过期限制,则该 cookie 将不会保留在客户端计算机上,当用户会话到期时该 cookie 即到期。
cookie 仅能存储 string 类型的值。在将任何非字符串值存储到 cookie 中之前,必须将它们转换为字符串

 

httpcookie mycookie = new httpcookie("cooker");
mycookie["name"] = "zzh";
mycookie["today"] = "friday";
mycookie.expires = datetime.now.adddays(1);
//mycookie.expires.adddays(1);
response.cookies.add(mycookie);
//response.appendcookie(mycookie);
mycookie.domain = "abc.com"; //指定作用域abc.com和子域名如a.abc.com可用
mycookie.path = "/admin"; //只能用于 admin 文件夹或虚拟根目录中的页面

2. 读cookie

 

出于安全原因,您只能读取属于同一域的页所设置的 cookie。如果已设置 cookie 的 path 属性,则只有该域路径中的页和子文件夹能够使用该 cookie。
在读取特定 cookie 值时,请测试该 cookie 是否存在以及它是否具有值,否则将发生异常。
cookie 中的所有值都作为 string 类型存储,因此若要将 cookie 值作为其他数据类型使用,必须对值进行相应地转换。

 

if (request.cookies["cooker"] != null)
{
    string cooker;
    if (request.cookies["cooker"]["name"] != null)
    { cooker = request.cookies["cooker"]["name"]; }
}

3. 删cookie

 

不能直接删除用户计算机中的 cookie。但是,可以通过将 cookie 的到期日期设置为过去的日期,让用户的浏览器来删除 cookie。当用户下一次向设置该 cookie 的域或路径内的页发出请求时,浏览器将确定该 cookie 已到期并将其移除。

调用 cookies 集合的 remove 方法可从服务器端的集合中移除 cookie,使 cookie 不会被发送至客户端。但是,如果客户端已存在 cookie,则该方法无法从客户端将其移除。

 

if (request.cookies["cooker"] != null)
{
    httpcookie mycookie = new httpcookie("cooker");
    mycookie.expires = datetime.now.adddays(-1d);
    response.cookies.add(mycookie);
}
循环删

 

 

httpcookie acookie;
string cookiename;
int limit = request.cookies.count;
for (int i=0; i

 

 

4. 改cookie

不能直接修改 cookie。更改 cookie 的过程涉及创建一个具有新值的新 cookie,然后将其发送到浏览器来覆盖客户端上的旧版本 cookie。下面的代码示例演示如何更改存储用户对站点的访问次数的 cookie 的值

int counter;
if (request.cookies["counter"] == null)
    counter = 0;
else
{
    counter = int.parse(request.cookies["counter"].value);
}
counter++;
response.cookies["counter"].value = counter.tostring();
response.cookies["counter"].expires = datetime.now.adddays(1);

5. cookie安全

 

不要将任何关键信息存储在 cookie 中。例如,不要将用户的密码存储在 cookie 中,即使是暂时存储也不要这样做。通常,不要将任何信息保存在 cookie 中,因为一旦它被假冒,就会危及您的应用程序的安全。而是在 cookie 中保存对信息在服务器上的位置的引用。
将 cookie 的过期日期设置为可接受的最短实际时间。尽可能避免使用永久 cookie。
考虑对 cookie 中的信息。
考虑将 cookie 的 secure 和 httponly 属性设置为 true。


cookie.secure=true 使 cookie 只能在使用安全套接字层 (ssl) 的连接上传输。ssl 并不能防止保存在用户计算机上的 cookie 被读取或操作,但可防止 cookie 在传输过程中被读取,因为 cookie 已被加密。

 

;>