Cookie与自动保存

<iframe marginwidth="0" marginheight="0" src="http://218.16.120.35:65001/PC/Global/images/b.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
0.相关概念及知识
1.编写和保存Cookie
2.列举Cookie
3.读取Cookie
4.修改和删除Cookie
5.Cookie和安全性
6.设定IE浏览器是否接受Cookie

0.相关概念及知识

Cookie提供了一种在Web应用程序中存储用户特定信息的方法。
例如,当用户访问您的站点时,
您可以使用Cookie存储用户首选项或其他信息。
当该用户再次访问您的网站时,应用程序便可以检索以前存储的信息。


什么是Cookie?

Cookie是一小段文本信息,
伴随着用户请求和页面在Web服务器和浏览器之间传递。
Cookie包含每次用户访问站点时Web应用程序都可以读取的信息。

例如,
如果在用户请求站点中的页面时应用程序发送给该用户的不仅仅是一个页面,
还有一个包含日期和时间的Cookie,
用户的浏览器在获得页面的同时还获得了该Cookie,
并将它存储在用户硬盘上的某个文件夹中。

以后,如果该用户再次请求您站点中的页面,
当该用户输入URL时,浏览器便会在本地硬盘上查找与该URL关联的Cookie。
如果该Cookie存在,浏览器便将该Cookie与页请求一起发送到您的站点。
然后,应用程序便可以确定该用户上次访问站点的日期和时间。
您可以使用这些信息向用户显示一条消息,也可以检查到期日期。

Cookie与网站关联,而不是与特定的页面关联。
因此,无论用户请求站点中的哪一个页面,浏览器和服务器都将交换Cookie信息。
用户访问不同站点时,各个站点都可能会向用户的浏览器发送一个Cookie;
浏览器会分别存储所有Cookie。

使用Cookie能够达到多种目的,所有这些目的都是为了帮助网站记住用户。
例如,一个实施民意测验的站点可以简单地将Cookie作为一个Boolean值,
用它来指示用户的浏览器是否已参与了投票,这样用户便无法进行第二次投票。
要求用户登录的站点则可以通过Cookie来记录用户已经登录,
这样用户就不必每次都输入凭据。


Cookie的限制

大多数浏览器支持最大为4096字节的Cookie。
由于这限制了Cookie的大小,最好用Cookie来存储少量数据,
或者存储用户ID之类的标识符。
用户ID随后便可用于标识用户,以及从数据库或其他数据源中读取用户信息。

浏览器还限制站点可以在用户计算机上存储的Cookie的数量。
大多数浏览器只允许每个站点存储20个Cookie;
如果试图存储更多Cookie,则最旧的Cookie便会被丢弃。
有些浏览器还会对它们将接受的来自所有站点的Cookie总数作出绝对限制,
通常为300个。

虽然Cookie在应用程序中非常有用,但应用程序不应依赖于能够存储Cookie。
不要使用Cookie支持关键功能。如果应用程序必须依赖于Cookie,
则可以通过测试确定浏览器是否将接受Cookie。


1.编写和保存Cookie
复制C#代码保存代码
//保存用户名和密码
protected void Button1_Click(object sender, EventArgs e)
{
    //因为涉及到密码等的保存 最好是用MD5等加密后 再保存
    Response.Cookies["userInfo"]["userName"] = this.txt_UserName.Text.Trim();
    if (this.chk_SavePWD.Checked)
        Response.Cookies["userInfo"]["userPassword"] = this.txt_UserPassword.Text.Trim();
    Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);
    //或
    //HttpCookie aCookie = new HttpCookie("userInfo");
    //aCookie.Values["userName"] = this.txt_UserName.Text.Trim();
    //if (this.chk_SavePWD.Checked)
    //    aCookie.Values["userPassword"] = this.txt_UserPassword.Text.Trim();
    //aCookie.Expires = DateTime.Now.AddDays(-1);//立即失效
    //Response.Cookies.Add(aCookie);
}


2.列举Cookie
复制C#代码保存代码
//列出相关Cookie
protected void Button2_Click(object sender, EventArgs e)
{
    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)
        {
            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 />");
        }
    }
    this.Label1.Text = output.ToString();
}


3.读取Cookie
复制C#代码保存代码
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //读取相关保存值
        if (Request.Cookies["userInfo"] != null)
        {
            this.txt_UserName.Text = Request.Cookies["userInfo"]["userName"];
            this.txt_UserPassword.Text = Request.Cookies["userInfo"]["userPassword"];
            //或
            //System.Collections.Specialized.NameValueCollection UserInfoCookieCollection;
            //UserInfoCookieCollection = Request.Cookies["userInfo"].Values;
            //this.txt_UserName.Text =
            //    Server.HtmlEncode(UserInfoCookieCollection["userName"]);
            //this.txt_UserPassword.Text =
            //    Server.HtmlEncode(UserInfoCookieCollection["userPassword"]);
        }
    }
}


4.修改和删除Cookie

修改Cookie

不能直接修改Cookie。
更改Cookie的过程涉及创建一个具有新值的新Cookie,
然后将其发送到浏览器来覆盖客户端上的旧版本Cookie。

删除Cookie

删除Cookie(即从用户的硬盘中物理移除Cookie)是修改Cookie的一种形式。
由于Cookie在用户的计算机中,因此无法将其直接移除。
但是,可以让浏览器来为您删除Cookie。
该技术是创建一个与要删除的Cookie同名的新Cookie,
并将该Cookie的到期日期设置为早于当前日期的某个日期。
当浏览器检查Cookie的到期日期时,浏览器便会丢弃这个现已过期的Cookie。
下面的代码示例演示删除应用程序中所有可用Cookie的一种方法:
复制C#代码保存代码
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);
}


修改或删除子键
复制C#代码保存代码
Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();
Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);


修改单个子键的方法与创建它的方法相同,如下面的示例所示:
若要删除单个子键,可以操作Cookie的Values集合,该集合用于保存子键。
首先通过从Cookies对象中获取Cookie来重新创建Cookie。
然后您就可以调用Values集合的Remove方法,
将要删除的子键的名称传递给Remove方法。
接着,将Cookie添加到Cookies集合,
这样Cookie便会以修改后的格式发送回浏览器。
下面的代码示例演示如何删除子键。
在此示例中,要移除的子键的名称在变量中指定。
复制C#代码保存代码
string subkeyName;
subkeyName = "userName";
HttpCookie aCookie = Request.Cookies["userInfo"];
aCookie.Values.Remove(subkeyName);
aCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);


5.Cookie和安全性

Cookie的安全性问题与从客户端获取数据的安全性问题类似。
在应用程序中,Cookie是另一种形式的用户输入,
因此很容易被他们非法获取和利用。
由于Cookie保存在用户自己的计算机上,
因此,用户至少能看到您存储在Cookie中的数据。
用户还可以在浏览器向您发送Cookie之前更改该Cookie。

千万不要在Cookie中存储敏感信息,如用户名、密码、信用卡号等等。
不要在Cookie中放置任何不应由用户掌握的内容,
也不要放可能被其他窃取Cookie的人控制的内容。

同样,不要轻信从Cookie中得到的信息。
不要假定数据与您写出时相同;
处理Cookie值时采用的安全措施
应该与处理网页中用户键入的数据时采用的安全措施相同。
本主题前面的示例演示在页面中显示值前,
先对Cookie内容进行HTML编码的方法,
这与在显示从用户处得到的任何信息之前的做法相同。

Cookie以明文形式在浏览器和服务器间发送,
任何可以截获Web通信的人都可以读取Cookie。
可以设置Cookie属性,
使Cookie只能在使用安全套接字层(SSL)的连接上传输。
SSL并不能防止保存在用户计算机上的Cookie被读取或操作,
但可防止Cookie在传输过程中被读取,
因为Cookie已被加密。


6.设定IE浏览器是否接受Cookie

1).启动IE;
2).在“工具”菜单上,单击“Internet选项”,打开“Internet选项”对话框;
3).单击“隐私”选项卡,将滑块上移到更高的隐私级别。
如果移动到最顶端则是选择“阻止所有的Cookie”,
此时系统将阻止所有网站的Cookie,而且网站不能读取计算机上已有的Cookie;
4).单击“确定”按钮。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值