浅谈Cookie与如何在ASP.NET应用

1:有状态服务与无状态服务

在讨论什么是cookie之前,首选需要了解他们的作用,和他们在HTTP中的应用,因为HTTP就是基于无状态服务提供服务。
无状态服务:一句话总结,它是没有记忆的,当我们登录一个网站,输入账户名密码,下一次登录的时候依然要输入用户名,密码。
有状态服务:与无状态服务相反,它会保存用户信息,下次访问服务的时候能够自动识别相应的用户。

2:Cookie的由来

我们使用的HTTP就是无状态的服务,就以为这即便是相同的请求,都需要执行相同的初始化流程,这样给服务器带来一个灾难性的问题,服务器每次接收到用户的请求都需要到后台数据库查询用户身份的合规性。

Cookie很好的解决了这个问题,它是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。

通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能。

3:如何查看Cookie

Check Cookie

4: ASP.NET案例

网站Lab04_2,Default.aspx为默认首页,提供登录窗体,当用户名为第一次键入时,页面显示:欢迎新用户!当用户名在1年内被重复键入时,则弹出对话框提示:XXX重复了!同时显示1年内登录过的用户数和登录过的用户名

protected void Button1_Click(object sender, EventArgs e)
        {
            string username = TextBox1.Text;
            if (Request.Cookies[username] == null) // 通过键找到值,如果null,说明是第一次登录
            {
                Response.Write("欢迎新用户");
                HttpCookie co = new HttpCookie(username, username);  // 构造一个cookie
                co.Expires = DateTime.Now.AddYears(1);
                Response.Cookies.Add(co);
            }
            else
            {
                Response.Write(TextBox1.Text + " 已经登录");
                string user_info = username + "已经登录过了!\n";
                user_info += "登录过的用户数:" + Request.Cookies.Count;
                user_info += "\n登录过的用户名:";
                for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
                {
                    user_info += HttpContext.Current.Request.Cookies[i].Value.ToString() + " ";
                }
                Response.Write("<script>alert(` " + user_info + "`)</script>");
            }
        }

经验总结

  • Cookie是以键值对的方式,保存在浏览器中,下一次登录浏览器就会有相应的记录。
  • Cookie的构造方法有一下几种:
    Cookie Constructors
  • 我使用的是第二种方式,刚开始我认为第一个字段不重要,所以给了一个固定的字符串”user_info”,发现用户永远都是新的,说明cookie保存失败。这才想起来cookie是键值对的信息保存的,要去寻找值是需要通过键的,如果设置一个固定的值cookie的数量是不会增加的。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×