zoukankan      html  css  js  c++  java
  • ASP.NET Cookie使用详解

    1.什么是cookie? 
    cookie 是一小段文本信息,伴随用户请求,在web服务器和浏览器之间传递。用户每次访问站点的时候,

    web应用程序都可以读取cookie包含的信息。 
    假设在用户请求您的网站的某个页面时,您的应用程序不仅是返回请求的页面。同时也返回一个包含日期

    和时间的cookie。用户的浏览器在获得页面的同时也获得了cookie.并且cookie保存在客户端的cookie文

    件夹中。 
    2.cookie 的限制 
    大多数浏览器支持最多可达4096字节(大约4KB)cookie.浏览器还限制了,一个站点可以在客户端保存

    cookie数。大多数浏览器允许每个站点最多放20个cookie.如果试图保存更多的cookie,那么先前的cookie

    将被删除。还有些浏览器会对来自所有站点cookie总数限制,这个限制通常为300个。 
    3.cookie 如何创建 
    在创建cookie的时候要指定几个值。最初,您要指定cookie的名字和要保存的值。您也可以创建多个

    cookie。但每个cookie的名字必须唯一,以便日后取值时识别。(cookie是按名字储存的,所以您要创建

    两个名称相同的cookie,那么最后那个cookie将覆盖前一个。) 
    您也可以给cookie指定过期日期和时间.cookie是写入到用户硬盘上的,然后可能一直都留在磁盘上。因

    此,您可以指定cookie的过期日期和时间。当用户下次访问您的站点的时候,浏览器会先检查您站点的所

    有cookie,如果某个cookie已经过期,浏览器不会把这个cookie随页面请求一起发送给服务器,而是删除

    这个已经过期的cookie.(您的站点可能已经在用户磁盘上写入多个cookie。但个每个cookie的过期日期和

    时间不同)。浏览器负责磁盘上的cookie,这将影响您的应用程序对cookie的使用 
    如果没有设置cookie的有效时间,还是可以创建cookie(我们称做会话cookie),会话cookie不会保存到磁

    盘上,而是保存在内存中。成为用户会话信息的一部分。如果用户关闭浏览器或者会话超时,该cookie将

    被删除。这种非永久性的cookie.

    4.cookie 中的创建方法 
    您可以通过多种方法创建cookie然后把cookie对象放到Response.Cookies集合中。随请求页面一起返回给

    浏览器。 
    第一种: 
    Response.Cookies("cookiename").Value="aaaa"; //创建一个名字为cookiename的cookie.然后在cookie

    中存储的值为aaaa 
    Response.Cookies("cookiename").Expires=DateTime.Now.AddDays(1);//指定cookie的过期时间为1天 
    第二种: 
    HttpCookie acookie=new HttpCookie(cookiename);//HttpCookie类创建cookie然后在构造方法中指定

    cookie名称 
    还有一种重载构造函数 
    HttpCookie acookie=new HttpCookes(cookiename,cookievalue);//详细用法参考MSDN这里不在讲述 
    //同第一种方法一样,也要给cookie指定失效时间 
    acookie.Expires=DateTime.Now.AddDays(1);//失效时间为1天 
    //acookie.Value="aaaa"; 也可以这样给cookie赋值 
    Response.Cookies.Add(acookie);然后写入到浏览器中 
    注意:在设置cookie有效时间必须为DateTime类型。而为cookie的Value属性赋值必须为字符串类型(不

    是字符串类型,必须要转型)因为cookie中的任何值最终都是以字符串的形式保存的。 
    5.多值cookie(子键) 
    您也可以在一个cookie中保存多个名称/值对。名称/值对也称作“键”或“子键”。(如果你熟悉URL,你会发

    现子键和查询字符串非常相象)。 
    6.如何创建带子键的cookie ,其实和创建cookie的语句基本相同。我们把上面的例子加以改进 
    看下面的例子 
    第一种: 
    Response.Cookies("cookiename")("cookiechildname")="cookievalue";// 
    创建一个名字为cookiename的cookie,然后在下面有个子键,并给子键赋值 
    是不是合创建一个cookie很相似 
    Response.Cookies("cookiename").Expires=DateTime.Now.AddDays(1);// 
    同样给cookie指定过期日期。和创建一个cookie一样,指定cookie的名称就可以 
    第二种: 
    HttpCookie acookie=new HttpCookie(cookiename);//同样创建一个cookie对象 
    重载那个我就不写了 
    acookie.Values["cookiename"]="cookievalue";//在cookie下创建子键并赋予值 
    这个不在是Value而是Values集合属性。我们知道集合集合可以通过索引访问的 
    acookie.Expires=DateTime.Now.AddDays(1);//还是给cookie指定一个失效日期 
    Response.Cookies.Add(acookie);//把cookie写入到浏览器中 
    基本上和创建不带子键的cookie很相同,如果想具体了解请参考msdn.这里就不讲述了

    7.如何控制cookie 
    默认情况下,一个站点的所有cookie都保存在客户端,而且这些cookie都会随着对站点的发送请求一起发

    送到服务器。也就是说,站点的每个页面都能得到该站点的所有cookie. 
    要将cookie限制到服务器上的某个文件夹,请按如下方法设置cookie的Path属性: 
    HttpCookie acookie=new HttpCookie(cookiename); 
    acookie.Value="aaaa"; 
    acookie.Expires=DateTime.Now.AddDays(1); 
    acookie.Path=/Application; 
    Response.Cookies.Add(acookie); 
    路径可以是站点根目录下的物理路径,也可以是虚拟根目录。这样一来,cookie就只能用语Application

    文件夹或虚拟根目录中页面。例如,如果您的站点名为www.gouku.com
    ,则前面示例中生成cookie就只能用语路径为http://www.gouku.com/Application/的页面以及该文件夹下

    面的所有页面,而不适用于其他应用程序的页面,如http://www.gouku.com/test/或

    http://www.gouku.com/下的页面。 
    提示:通过对InternetExplorer和Mozilla浏览器进行测试发现,此处使用的路径是区分大小写的。一般

    而言,Windows 服务器上的URL不区分大小写,但这种情况例外。您无法控制用户如何在浏览器中输入URL

    ,但是,如果您的应用程序依赖于与特定路径相关的 Cookie,则请确保您所创建的所有超链接中的URL与

    Path属性值的大小写相匹配。 
    将Cookie的有效范围限制到域 
    默认情况下,Cookie与特定的域相关联。例如,如果您的站点是www.contoso.com,那么当用户向该站点

    请求页面时,您编写的 Cookie就被发送到服务器。(有特定路径值的Cookie除外,我在上一节刚刚解释

    过。)如果您的站点有子域(例如contoso.com、sales.contoso.com 和support.contoso.com),就可以

    把Cookie同特定的子域相关联。为此,需要设置Cookie的Domain 属性,如下所示: 
    Response.Cookies("cookiename").Value=DateTime.Now.ToString 
    Response.Cookies("cookiename").Expires=DateTime.Now.AddDays(1) 
    Response.Cookies("cookiename").Domain="support.contoso.com" 
    如果按照这种方式设置域,则Cookie只能用于指定子域中的页面。 
    您也可以利用Domain属性来创建可在多个子域中共享的Cookie。例如,对域进行如下设置: 
    Response.Cookies("cookiename").Value=DateTime.Now.ToString 
    Response.Cookies("cookiename").Expires=DateTime.Now.AddDays(1) 
    Response.Cookies("cookiename").Domain="contoso.com" 
    这样,该Cookie就可用于主域、sales.contoso.com和support.contoso.com 
    8.如何读取cookie 
    当浏览器向服务器发送请求时,该服务器的cookie和请求页面一起返回,您可以使用request对象来读取

    cookie.读取cookie的方法和Response对象写入cookie的方法非常类似 
    看下面的例子: 
    第一种方法: 
    string info =Request.Cookies["cookiename"].Value;//通过索引来获取值 
    是不是和Response.Cookies("cookiename").Value=info很相似 
    第二种方法 
    HttpCookie acookie=Request.Cookie("cookiename");//通过Request获取acookie对象 
    acookie.Value;//在通过Value属性获取值基本上和Response用法相似。 
    //在获取cookie之前,应确保该cookie确实存在。否则,您将得到一个system.NullReferenceException

    异常。最好在页面显示cookie内容之前。用Server.HtmlEncode()方法对cookie内容进行编码。以确保用

    户没有cookie中没有添加 
    可执行简本。 
    9.如何读取带子键的cookie 
    与读取cookie相类似 
    第一种方法: 
    string info=Request.Cookie["cookiename"]["cookiechildname"];//与 
    Response.Cookie["cookiename"]["cookiechildname"]=info 
    第二种方法: 
    HttpCookie acookie=Request.Cookie["cookiname"]["cookiechildname"]

  • 相关阅读:
    引用kernel32.dll中的API来进行串口通讯
    vs2017 项目生成时不产生xml文件的方法
    session的处理机制
    用户未登录或Session超时时重定向到登录页,不那么简单
    VS C# debug文件夹中各文件的作用
    Tomcat(免安装版)的安装与配置【转】
    关于C#关闭窗体后,依旧有后台进程在运行的解决方法
    DatakeyNames和datakey
    ASP.NET页面生命周期描述
    比较C#中几种常见的复制字节数组方法的效率
  • 原文地址:https://www.cnblogs.com/zqn518/p/2363294.html
Copyright © 2011-2022 走看看