博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net 10 Cookie & Session
阅读量:6279 次
发布时间:2019-06-22

本文共 7429 字,大约阅读时间需要 24 分钟。

Cookie

1.什么是Cookie

一小段文本,明文的数据,关于网站相关的文本字符串数据.一个客户端状态保持机制~

存储在客户端的浏览器内存里面或者磁盘(如果不指定过期时间,那么存储在客户端浏览器内存中,如果指定了过期时间,那么存储在客户端的磁盘上.)

cookie跟网站有关的,各个网站只能访问跟自己网站相关的cookie(自动执行!?:cookie会随着请求网站一块发送到后台,如果请求百度的时候,那么就把百度的cookie放到请求报文里面去,然后发送到后台!)

 

2.cookie的创建和属性

 cookie的创建:

//Cookie:是一个客户端状态保持机制,(网站的数据是存在客户端),与隐藏域与ViewState对象都属于这种客户端状态保持,Cookie中存储的是关于网站相关的文本字符串数据。Cookie的存储方式有两种,如果不指定过期时间,那么存储在客户端浏览器内存中,如果指定了过期时间,那么存储在客户端的磁盘上。Cookie是与具体的网站有关的,如果我们将Cookie设置了过期时间,那么当用户在指定时间内访问我们的网站,那么属于我们网站的Cookie数据会放在请求报文中发送过来,其它网站的Cookie不会发送。            //创建Cookie.            Response.Cookies["cp1"].Value = "itcast";//执行这行代码时,最后会在返回的响应报文的响应头中加上一个Set-Cookie:cp1=itcast;path=/ 返回给浏览器.由于这里没有指定过期时间,所以cookie数据"itcast"默认是存储在浏览器内存中的.                        //创建Cookie并且指定过期时间.            Response.Cookies["cp2"].Value = "laowang";            Response.Cookies["cp2"].Expires = DateTime.Now.AddDays(3);//指定过期时间            //删除Cookie           // Response.Cookies["cp2"].Expires = DateTime.Now.AddDays(-1);            //Cookie跨域(域名)            Response.Cookies["cp3"].Value = "laowang";            Response.Cookies["cp3"].Domain = "xxx.com";//设置主域的。            /*             *Cookie的域:浏览器往后台发送数据时候,要把cookie放到请求报文里面去,发送到后台。             *那么有个问题:请求是子域的网页,那么主域的cookie会不会发送到后台呢?             *答案:是的。一块发送。如果请求时主域页面,子域的cookie是不会发送到后台的。             *如果子域想让请求主域页面的时候也一块发送到后台,设置当前Cookie的域为主域可以了。*/                       Response.Cookies["cp3"].Path = "/2015-5-31";            /*             * cookie可以设置一个Path来限制某个路径下面的页面才会把cookie发送到后台。             *比如:请求图片,请求一个css、js,为了提高性能,可以通过 path设置页面的所在路径,来控制cookie的发送。             */            Response.Cookies["cp3"].Expires = DateTime.Now.AddDays(3);            //另外一种创建Cookie的方式。            HttpCookie cookie1 = new HttpCookie("cp4","sssss");            cookie1.Expires = DateTime.Now.AddDays(3);            Response.Cookies.Add(cookie1);

cookie的读取:

//获取Cookie的值            if (Request.Cookies["cp2"] != null)            {                Response.Write(Request.Cookies["cp2"].Value);            }

 

3.cookie的应用场景

记住登录用户名

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs"     Inherits="CZBK.ItcastProject.WebApp._2015_5_31.Login" %>
用户名:
密码;
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace CZBK.ItcastProject.WebApp._2015_5_31{    public partial class Login : System.Web.UI.Page    {        public string LoginUserName { get; set; }        protected void Page_Load(object sender, EventArgs e)        {            if (IsPostBack)            {                string userName = Request.Form["txtName"];                //写到Cookie中.                Response.Cookies["userName"].Value = Server.UrlEncode(userName);                Response.Cookies["userName"].Expires = DateTime.Now.AddDays(7);                           }            else            {                //读Cookie。                if (Request.Cookies["userName"] != null)                {                    string name =Server.UrlDecode(Request.Cookies["userName"].Value);                    LoginUserName = name;                    Response.Cookies["userName"].Value = Server.UrlEncode(name);                    Response.Cookies["userName"].Expires = DateTime.Now.AddDays(7);                }            }        }    }}

 

电商购物车

自动登录

 

4.Cookie图例

****

 

5.Cookie的相关问题

1)大多数浏览器支持最大为 4096 字节的 Cookie。由于这限制了 Cookie 的大小,最好用 Cookie 来存储少量数据,或者存储用户 ID 之类的标识符。

2)浏览器还限制站点可以在用户计算机上存储的 Cookie 的数量。大多数浏览器只允许每个站点存储 20 个 Cookie;如果试图存储更多 Cookie,则最旧的 Cookie 便会被丢弃。

3)有些浏览器还会对它们将接受的来自所有站点的 Cookie 总数作出绝对限制,通常为 300 个。

4)Cookie的另外一个创建方法:

//另外一种创建Cookie的方式。HttpCookie cookie1 = new HttpCookie("cp4","sssss");cookie1.Expires = DateTime.Now.AddDays(3);Response.Cookies.Add(cookie1);

5)多值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);

 6)控制Cookie范围

默认情况下,一个站点的全部 Cookie 都一起存储在客户端上,而且所有 Cookie 都会随着对该站点发送的任何请求一起发送到服务器。也就是说,一个站点中的每个页面都能获得该站点的所有 Cookie。但是,可以通过两种方式设置 Cookie 的范围:

  • 将 Cookie 的范围限制到服务器上的某个文件夹,这允许您将 Cookie 限制到站点上的某个应用程序。( 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";

**如果要多个子域共享Cookie,则将子域中的Cookie的Domain值设置为主域的

Response.Cookies["domain"].Value = DateTime.Now.ToString();Response.Cookies["domain"].Expires = DateTime.Now.AddDays(1);Response.Cookies["domain"].Domain = "contoso.com";

7)读取Cookie (多值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"]);}
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"]);}

8)修改和删除Cookie

删除Cookie,实际上是修改Cookie的生存时间:

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

修改Cookie的本质:创建一个具有新值的新 Cookie,然后将其发送到浏览器来覆盖客户端上的旧版本 Cookie

9)Cookie的不安全

因为Cookie存在客户端的,所以不安全,加密!一些不重要的信息

10)确定浏览器是否接受Cookie

确定 Cookie 是否被接受的一种方法是尝试编写一个 Cookie,然后再尝试读取该 Cookie。如果无法读取您编写的 Cookie,则可以假定浏览器不接受 Cookie。

第一个页面:设置一个TestCookie,然后跳转到第二个页面

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

 

 

Session

转载于:https://www.cnblogs.com/youguess/p/9366868.html

你可能感兴趣的文章
每日一个机器学习算法——adaboost
查看>>
分享pdf转换成word的方法
查看>>
jquery选择器
查看>>
Mac安装Tomcat的Home路径
查看>>
mysql 主从配置
查看>>
Java多线程(二) synchronized 针对对象进行锁定
查看>>
mount过程分析之六——挂载关系(图解)【转】
查看>>
宏定义编写技巧__调试技巧【原创】
查看>>
SQLAlchemy基础操作一
查看>>
前端的字符串时间如何自动转换为后端Java的Date属性,介绍springMVC中如何解决时间转换问题...
查看>>
0317复利软件更新
查看>>
wpf之Popup弹出自定义输入"键盘"
查看>>
Webform 分页
查看>>
分享python分析wave, pcm音频文件
查看>>
Linux 下 安装jdk 1.7
查看>>
odoo开发笔记--from视图隐藏顶部&tree视图保留
查看>>
C#对象JSON序列化与客户端JavaScript反序列化
查看>>
windows10最实用的快捷键、高效的windows模式
查看>>
HDU 2546 饭卡(01 背包)
查看>>
debian9源
查看>>