您的位置:首页 > 编程语言 > ASP

Asp.net 之Cookie简单介绍与使用

2013-07-23 11:52 876 查看

什么是Cookie

Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。通常经过加密,所以查看浏览器保存到本地的Cookie时,一般都是一个文本文件这些文件通常是以user@domain格式命名的,user是你的本地用户名,domain是所访问的网站的域名。
如查看Csdn博客在我本地的cookie:
文件



内容



由于cookie都是经过加密的,所以看到的都是密文,只有很少的内容能看懂。如里面的blog.csdn.net,由此可以猜出此文件内容肯定跟csdn个人博客有关,但具体的内容由于是加密的所以这些东西是很难读懂的,加密也保证了信息泄露的安全性。
其实说白了,cookie就是访问网站时,服务器将访问者的个人信息以文本文档的形式保存到用户本地计算机上,以方便再次访问时直接读取。而实现的这一技术就叫cookie。一旦将
Cookie 保存在计算机上,则只有创建该Cookie 的网站才能读取它。

Cookie有什么作用

Cookie 的用途之一是存储用户在特定网站上的密码和ID。典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入ookies,以便在最后付款时提取信息。各家公司利用cookie
的一般用途包括:在线定货系统、网站个人化和网站跟踪

Cookie的生命周期

Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
在网站设计对cookie进行编程时,如果没有设置Expire的值cookie的内容暂时保存在内存中,关闭浏览器之后该信息就会被删除;设置Expire的值之后,cookie会以文本的形式保存到本地上,每次打开浏览器访问该网站时客户端都会向服务器发送该cookie,直至设置的cookie有效期逾期为止,浏览器会将该信息清除。

cookie编程

创建cookie
方法1:
Response.Cookies["username"].value="mike";
Response.Cookies["username"].Expires=DateTime.MaxValue;

方法2:

HttpCookie acookie = new HttpCookie("username");
acookie.Value="mike";
acookie.Expires=DateTime.MaxValue;
Response.Cookies.Add(acookie);


创建多值cookie
方法1:

Response.Cookies["login"]["username"].value="mike";
Response.Cookies["login"]["password"].value="123456";
Response.Cookies["login"].Expires=DateTime.MaxValue; //有效时间设置为最长


方法2:

HttpCookie cookie = new HttpCookie("login");
cookie.Values["username"]="mike";
cookie.Values["password"]="123456";
cookie.Expires= System.DateTime.Now.AddDays(1);//设置过期时间  1天
Response.Cookies.Add(cookie);


Cookie读取

stringstr = Request.Cookies("userName").Value;
Cookie多值读取
if (Request.Cookies["login"]!=null )
{
string name=Request.Cookies["login"]["username"];
string password =Request.Cookies["login"]["password"];
}


Cookie删除
通过Expires设置过期时间即可,如

cookie.Expires=DateTime.Now.AddDays(-30);


cookie记录用户名和密码的实例

.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="Testcookie.login" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<style type="text/css">
.style1
{
width: 192px;
}
.style3
{
width: 164px;
}
.style4
{
width: 275px;
}
</style>
</head>
<body>
<form id="form1" runat="server" action="login.aspx">
<table style="width: 100%;">
<tr>
<td class="style4">
</td>
<td align="center" class="style4">
<asp:Label ID="lblusername" runat="server" Text="用户名"></asp:Label>
</td>
<td align="center" class="style3">
<asp:TextBox ID="txtusername" runat="server" Width="143px"></asp:TextBox>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td align="center" class="style4">
<asp:Label ID="lblpassword" runat="server" Text="密  码"  ></asp:Label>

</td>
<td align="center" class="style3">
<asp:TextBox ID="txtpassword" runat="server" TextMode="Password"></asp:TextBox>
</td>
<td>
</td>
</tr>
<tr>
<td colspan="4" align="center">
<asp:Button ID="btnlogin" runat="server" Text="登陆" OnClick="btnlogin_Click" Width="82px" />
</td>
</tr>
</table>
</form>
</body>
</html>


.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Testcookie
{
public partial class login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//初始加载页面判断是否有cookie存在,若存在则读取cookie中的用户名和密码
if (Request.Cookies["login"] != null)
{
string username = Request.Cookies["login"]["username"];
string password = Request.Cookies["login"]["password"];
Response.Write(username);
txtusername.Text = username;
txtpassword.Text = password;
}

}
protected void btnlogin_Click(object sender, EventArgs e)
{
//第一次登录时保存用户名和密码                                                                                                       HttpCookie cookie = new HttpCookie("login");//创建cookie
cookie.Values["username"] = txtusername.Text;//保存用户名
cookie.Values["password"] = txtpassword.Text;//保存密码
cookie.Expires = DateTime.Today.AddDays(1);//设置过期时间,此值如不设置,cookie有效时期为Session的有效时期即关闭浏览器cookie消失
Response.Cookies.Add(cookie);
// Response.Write(cookie.Values["username"] + cookie.Values["password"]);
//Response.Write(Request.Cookies["login"]["username"] + Request.Cookies["login"]["username"]);
}
}
}


测试的时候分别用例IE、360、谷歌浏览器,但发现在IE中保存用户名和密码后不能在其他浏览器中读取,同样其他浏览器也做不到。这是因为在一台计算机中安装多个浏览器,每个浏览器都会在各自独立的空间存放cookie。因为cookie中不但可以确认用户,还能包含计算机和浏览器的信息,所以一个用户用不同的浏览器登录或者用不同的计算机登录,都会得到不同的cookie信息,另一方面,对于在同一台计算机上使用同一浏览器的多用户群,cookie不会区分他们的身份,除非他们使用不同的用户名登录。所以用不同浏览器登陆同意网站会记录不同的用户信息和访问信息。

总结

在B/S开发中Cookie是一个很常用并且很重要的知识,不仅要学会对cookie的读与写,还有对cookie的用途、生命周期有一个全面系统的理解,从而帮助我们更好的利用和使用cookie进行编程设计。当然提到cookie,最重要的一个问题就是安全问题,尽管在cookie中已经对数据加密,经过加密处理后的信息即使被网络上一些别有用心的人截获,也看不懂,因为他看到的只是一些无意义的字母和数字。然而,现在遇到的问题是,截获Cookie的人不需要知道这些字符串的含义,他们只要把别人的Cookie向服务器提交,并且能够通过验证,他们就可以冒充受害人的身份,登陆网站。这种方法叫做Cookie欺骗。所以对于Cookie知识还需深入了解和挖掘。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: