ASP.NET中Cookie用法小节

Cookie用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性.使用Cookie对象保存的代码如下:

 

//新建Cookie

HttpCookie cookie = new HttpCookie["aspcn"];
cookie.Value = "灌水小鱼";
Response.AppendCookie(cookie);
或者:

Response.Cookies["key"].Value="value";

 

//读取信息

HttpCookie cookie = Request.Cookies["aspcn"];
cookieValue = cookie.Value;
或者:

string UserID=Response.Cookies["key"].Value;

//Cookie中存储多个值

HttpCookie cookie = new HttpCookie("aspcn");
cookie.Values.Add("webmaster","灌水小鱼");
cookie.Values.Add("writer","beige");
cookie.Values.Add("LinkColor","blue");
Response.AppendCookie(cookie);

取出信息也一样简单

HttpCookie cookie = Request.Cookies["aspcn"];
value1 = cookies.Values["webmaster"];
value2 = cookies.Values["writer"];

注:

Request.Cookies.Clear()这个方法并不是删除Cookie
删除 Cookie(即从用户的硬盘中物理移除 Cookie)是修改 Cookie 的一种形式。
由于 Cookie 在用户的计算机中,因此无法将其直接移除。
但是,可以让浏览器来为您删除 Cookie。
该技术是创建一个与要删除的 Cookie 同名的新 Cookie,
并将该 Cookie 的到期日期设置为早于当前日期的某个日期。
当浏览器检查 Cookie 的到期日期时,浏览器便会丢弃这个现已过期的 Cookie。

//删除程序中所有可用的Cookie

HttpCookie aCookie; 
string cookieName;
int limit = Request.Cookies.Count; 
for (int i = 0; i < limit; i++) 

cookieName = Request.Cookies[i].Name; 
aCookie = new HttpCookie(cookieName); 
aCookie.Expires = DateTime.Now.AddDays(-1); 
Response.Cookies.Add(aCookie); 
}

cookies过期时间

Response.Cookies("user_name").Expires=Date()+1 //指定cookie保存时间

保留COOKIES一个小时
Response.Cookies("MyCookie").Expires= (now()+1/24)

Response.Cookies("MyCookie").Expires = DateAdd("h", 1, Now())

Response.Cookies("CookieName").Expires=DateAdd("m",60,now())

注:

Response.Cookies("User").expires=second()+7
在expires后面定义的时间可以用时间函数代替
例如:date()+7就表示在今天的时间上加上7天,而second()+7则是7秒了。

这里的时间累加建议还是使用DateAdd函数,比如我们要累加一小时,则使用:
Response.Cookies("baidooglecom").expires = DateAdd("h", 1, Now())

30分钟:
Response.Cookies("CookieName").Expires=DateAdd("n",30,now())

dateadd("S",30,now()) //得到秒

Expires 指定 cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上,或在许多时候,我们希望能更长时间地在访问者的计算机上保存cookie。必须设置该日期。
若此项属性的设置未超过当前日期,则在任务结束后 cookie 将到期。
cookie的使用到期时间为“2010年1月1日”: Response.Cookies("CookieName").Expires=#January 01, 2010#
cookie的过期时间为“cookie的创建时间+365天”:Response.Cookies("CookieName").Expires=Date+365 推荐的
但最好不要随便写 Response.Cookies("CookieName").Expires=Date,这样页面之间的调用时值会为空。

 

///8月8日添加

Response.Cookies["userInfo"]["userName"] = "patrick";
Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();
Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);

HttpCookie aCookie = new HttpCookie("userInfo");
aCookie.Values["userName"] = "patrick";
aCookie.Values["lastVisit"] = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);

 

实例

示例向 Cookies 集合添加两个 Cookie,一个名为 userName,另一个名为 lastVisit。对于第一个 Cookie,Cookies 集合的值是直接设置的。可以通过这种方式向集合添加值,因为Cookies 是从 NameObjectCollectionBase 类型的专用集合派生的。

对于第二个 Cookie,代码创建了一个 HttpCookie 类型的对象实例,设置其属性,然后通过 Add 方法将其添加到 Cookies 集合。在实例化 HttpCookie 对象时,必须将该 Cookie 的名称作为构造函数的一部分进行传递。

这两个示例都完成了同一任务,即向浏览器写入一个 Cookie。在这两种方法中,有效期值必须为 DateTime 类型。但是,lastVisited 值也是日期时间值。因为所有 Cookie 值都存储为字符串,因此,必须将日期时间值转换为 String

 

//code

Response.Cookies["userName"].Value = "patrick";

Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1);

 

HttpCookie aCookie = new HttpCookie("lastVisit");

aCookie.Value = DateTime.Now.ToString();

aCookie.Expires = DateTime.Now.AddDays(1);

Response.Cookies.Add(aCookie);

 

//多值Cookie

Response.Cookies["userInfo"]["userName"] = "patrick";

Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();

Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);

 

HttpCookie aCookie = new HttpCookie("userInfo");

aCookie.Values["userName"] = "patrick";

aCookie.Values["lastVisit"] = DateTime.Now.ToString();

aCookie.Expires = DateTime.Now.AddDays(1);

Response.Cookies.Add(aCookie);

 

//控制Cookie的范围

HttpCookie appCookie = new HttpCookie("AppCookie");

appCookie.Value = "written " + DateTime.Now.ToString();

appCookie.Expires = DateTime.Now.AddDays(1);

appCookie.Path = "/Application1";

Response.Cookies.Add(appCookie);

 

//限制Cookie的域的范围

Response.Cookies["domain"].Value = DateTime.Now.ToString();

Response.Cookies["domain"].Expires = DateTime.Now.AddDays(1);

Response.Cookies["domain"].Domain = "support.contoso.com";

 

Response.Cookies["domain"].Value = DateTime.Now.ToString();

Response.Cookies["domain"].Expires = DateTime.Now.AddDays(1);

Response.Cookies["domain"].Domain = "contoso.com";

 

//读取Cookie

if(Request.Cookies["userName"] != null)

    Label1.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);

 

if(Request.Cookies["userName"] != null)

{

    HttpCookie aCookie = Request.Cookies["userName"];

    Label1.Text = Server.HtmlEncode(aCookie.Value);

}

 

if(Request.Cookies["userInfo"] != null)

{

    Label1.Text =

        Server.HtmlEncode(Request.Cookies["userInfo"]["userName"]);

 

    Label2.Text =

        Server.HtmlEncode(Request.Cookies["userInfo"]["lastVisit"]);

}

 

DateTime dt;

dt = DateTime.Parse(Request.Cookies["userInfo"]["lastVisit"]);

 

if(Request.Cookies["userInfo"] != null)

{

    System.Collections.Specialized.NameValueCollection

        UserInfoCookieCollection;

      

    UserInfoCookieCollection = Request.Cookies["userInfo"].Values;

    Label1.Text =

        Server.HtmlEncode(UserInfoCookieCollection["userName"]);

    Label2.Text =

        Server.HtmlEncode(UserInfoCookieCollection["lastVisit"]);

}

 

//读取Cookie

System.Text.StringBuilder output = new System.Text.StringBuilder();

HttpCookie aCookie;

for(int i=0; i<Request.Cookies.Count; i++)

{

    aCookie = Request.Cookies[i];

    output.Append("Cookie name = " + Server.HtmlEncode(aCookie.Name) 

        + "<br />");

    output.Append("Cookie value = " + Server.HtmlEncode(aCookie.Value)

        + "<br /><br />");

}

Label1.Text = output.ToString();

 

for(int i=0; i<Request.Cookies.Count; i++)

{

    aCookie = Request.Cookies[i];

    output.Append("Name = " + aCookie.Name + "<br />");

    if(aCookie.HasKeys)

    {

        for(int j=0; j<aCookie.Values.Count; j++)

        {

            subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys[j]);

            subkeyValue = Server.HtmlEncode(aCookie.Values[j]);

            output.Append("Subkey name = " + subkeyName + "<br />");

            output.Append("Subkey value = " + subkeyValue + 

                "<br /><br />");

        }

    }

    else

    {

        output.Append("Value = " + Server.HtmlEncode(aCookie.Value) +

            "<br /><br />");

    }

}

Label1.Text = output.ToString();

 

 

System.Text.StringBuilder output = new System.Text.StringBuilder();

HttpCookie aCookie;

string subkeyName;

string subkeyValue;

for (int i = 0; i < Request.Cookies.Count; i++)

{

    aCookie = Request.Cookies[i];

    output.Append("Name = " + aCookie.Name + "<br />");

    if (aCookie.HasKeys)

    {

        System.Collections.Specialized.NameValueCollection CookieValues = 

            aCookie.Values;

        string[] CookieValueNames = CookieValues.AllKeys;

        for (int j = 0; j < CookieValues.Count; j++)

        {

            subkeyName = Server.HtmlEncode(CookieValueNames[j]);

            subkeyValue = Server.HtmlEncode(CookieValues[j]);

            output.Append("Subkey name = " + subkeyName + "<br />");

            output.Append("Subkey value = " + subkeyValue + 

                "<br /><br />");

        }

    }

    else

    {

        output.Append("Value = " + Server.HtmlEncode(aCookie.Value) +

            "<br /><br />");

    }

}

Label1.Text = output.ToString();

 

 //修改和删除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);

 

HttpCookie aCookie;

string cookieName;

int limit = Request.Cookies.Count;

for (int i=0; i<limit; i++)

{

    cookieName = Request.Cookies[i].Name;

    aCookie = new HttpCookie(cookieName);

    aCookie.Expires = DateTime.Now.AddDays(-1);

    Response.Cookies.Add(aCookie);

}

 

//修改和删除子键

Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();

Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);

 

string subkeyName;

subkeyName = "userName";

HttpCookie aCookie = Request.Cookies["userInfo"];

aCookie.Values.Remove(subkeyName);

aCookie.Expires = DateTime.Now.AddDays(1);

Response.Cookies.Add(aCookie);

 

//Cookie的安全性

protected void Page_Load(object sender, EventArgs e)

{

    if (!Page.IsPostBack)

    {

        if (Request.QueryString["AcceptsCookies"] == null)

        {

            Response.Cookies["TestCookie"].Value = "ok";

            Response.Cookies["TestCookie"].Expires =

                DateTime.Now.AddMinutes(1);

            Response.Redirect("TestForCookies.aspx?redirect=" +

                Server.UrlEncode(Request.Url.ToString()));

        }

        else

        {

            Label1.Text = "Accept cookies = " +

                Server.UrlEncode(

                Request.QueryString["AcceptsCookies"]);

        }

    }

}

 

protected void Page_Load(object sender, EventArgs e)

{

    string redirect = Request.QueryString["redirect"];

    string acceptsCookies;

    if(Request.Cookies["TestCookie"] ==null)

        acceptsCookies = "no";

    else

    {

        acceptsCookies = "yes";

        // Delete test cookie.

        Response.Cookies["TestCookie"].Expires = 

            DateTime.Now.AddDays(-1);

    }

    Response.Redirect(redirect + "?AcceptsCookies=" + acceptsCookies,

    true);

}

原文地址:https://www.cnblogs.com/QiuJL/p/4524352.html