`

Cookie与自动保存

    博客分类:
  • JSP
阅读更多

Cookie与自动保存


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

//保存用户名和密码
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

//列出相关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
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 的一种方法:


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

修改单个子键的方法与创建它的方法相同,如下面的示例所示:
若要删除单个子键,可以操作 Cookie 的 Values 集合,该集合用于保存子键。
首先通过从 Cookies 对象中获取 Cookie 来重新创建 Cookie。
然后您就可以调用 Values 集合的 Remove 方法,
将要删除的子键的名称传递给 Remove 方法。
接着,将 Cookie 添加到 Cookies 集合,
这样 Cookie 便会以修改后的格式发送回浏览器。
下面的代码示例演示如何删除子键。
在此示例中,要移除的子键的名称在变量中指定。

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).单击“确定”按钮。 

分享到:
评论

相关推荐

    c #网页登录自动保存cookie

    c# 专用,发送post 请求自动保存网页cookie登录充值类软件专用

    COOKIE自动填充注销的实现

    COOKIE自动填充注销的实现 一个完成的小案例.附带演示非常利于学习

    微信小程序cookie维护插件 实现自动设置获取cookie功能

    微信小程序cookie维护插件 实现自动设置获取cookie功能 增加了cookie超时处理功能

    JAVA通过Session和Cookie实现网站自动登录的技术

    JAVA 通过 Session 和 Cookie 实现网站自动登录的技术 在网站开发中,实现自动登录功能是非常重要的,JAVA 通过 Session 和 Cookie 实现网站自动登录的技术是其中的一种方法。本文将详细介绍如何使用 Session 和 ...

    jsp cookie+session实现简易自动登录

    本文实例为大家分享了jsp cookie+session实现简易自动登录的具体代码,供大家参考,具体内容如下 关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。 如果设置了...

    一个基于jquery的页面表单草稿自动保存代码

    支持input type为 text,textarea,checkbox,radio,select,password,hidden的草稿自动保存 hidden的特殊性,因为hidden要手动触发change事件,当值改变的时候要 手动代码 .change() 触发一下才会保存相应的草稿 要实现...

    网页爬虫之cookie自动获取及过期自动更新的实现方法

    本文实现cookie的自动获取,及cookie过期自动更新。...1,采用selenium自动登录获取cookie,保存到文件; 2,读取cookie,比较cookie的有效期,若过期则再次执行步骤1; 3,在请求其他网页时,填入cookie,实现登录状

    cookie保存并读取用户登录信息

    cookie保存并读取用户登录信息.zip 这是注册后保存在cookie里面,然后可以自动登录了。不是数据库的,而是JSP里的。不过,可以借鉴思考哦

    python cookie反爬处理的实现

    Cookies的处理 作用 ...如果在请求的过程中产生了cookie,如果该请求使用session发起的,则cookie会被自动存储到session中. 案例 爬取雪球网中的新闻资讯数据:https://xueqiu.com/ #获取一个sessi

    cookie实现自动登录

    当用户第一次登录某个网站时,用户可以选择用户名及密码保存的有效期时间(一天,一周,一年等等),用户在有效期内再次访问该网站时,不用再次输入用户名及密码,即可自动登录访问网站

    清除网页上自动保存登陆用户名密码方法.docx

    此外,我们还需要注意的一点是,Internet选项不仅可以清除自动保存的用户名和密码,还可以删除Internet临时文件、Cookie、历史记录、表单数据等等。这可以帮助我们更好地保护我们的隐私和网络安全。 清除网页上自动...

    cookie和表单实现基本登录并保存信息

    存在则在用户名和密码输入框中自动填入cookie用户信息 否则跟第一次访问输入框为空一样 doLogin.jsp 执行login.jsp页面的请求,判断是否勾选保存登录状态 勾选了登录状态执行如下 获取用户名和密码(方法有2,方法2...

    asp.net利用cookie保存用户密码实现自动登录的方法

    在asp.net中可以用cookie保存用户的帐户密码实现自动登录的功能,但是需要强调一下,cookie在客户端保存,是不安全的,推荐使用md5加密保存。 下面分析一下在asp.net中cookie的创建、提取与销毁的方法: 创建cookie ...

    使用Cookie登录每个帐户只需登录一次,然后可以自由切换登录

    登录第一个帐户,保存Cookie; 登录第二个帐户,保存Cookie: …… 选择第一个Cookie,自动切换第一个帐户登录。

    cookie机制和session机制的区别.docx

    会话 cookie 一般不保存在硬盘上,而是保存在内存里。如果设置了过期时间,浏览器就会把 cookie 保存到硬盘上,关闭后再次打开浏览器,这些 cookie 依然有效直到超过设定的过期时间。 在实际应用中,cookie 机制...

    IE8如何清除网页上自动保存的登陆密码?.docx

    例如,可以在"Internet选项"对话框中的"安全"标签下,选择"受信站点",并添加可信任的网站,以避免自动保存密码。 清除IE8浏览器上的自动保存密码非常简单,只需要在"Internet选项"对话框中取消勾选"表单上的用户名...

    JSP实验内置对象、Cookie及JavaBean实验[参考].pdf

    然后,我们使用 Cookie 有效期的设置来保存用户的信息,使用户可以自动登录。 3. 用 JavaBean 和 JSP 设计一个某教育机构的简易在线报名子系统。 在这个实验中,我们使用 JavaBean 和 JSP 来设计一个简易在线报名...

    cookie.Session

    cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器...

    .net通过Session和Cookie实现网站自动登录的技术

    本实例通过asp.net模拟登陆并且保存Session和Cookie,成功登陆前台或者后台.

Global site tag (gtag.js) - Google Analytics