asp.net 10 Cookie & Session
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();//指定过期时间
//删除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();
//另外一种创建Cookie的方式。
HttpCookie cookie1 = new HttpCookie("cp4","sssss");
cookie1.Expires = DateTime.Now.AddDays();
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" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
用户名:<input type="text" name="txtName" value="<%=LoginUserName%>"/><br />
密码;<input type="password" name="txtPwd" /><br />
<input type="submit" value="登录" />
</div>
</form>
</body>
</html>
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(); }
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();
}
}
}
}
}
电商购物车
自动登录
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();
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(); HttpCookie aCookie = new HttpCookie("userInfo");
aCookie.Values["userName"] = "patrick";
aCookie.Values["lastVisit"] = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays();
Response.Cookies.Add(aCookie);
6)控制Cookie范围
默认情况下,一个站点的全部 Cookie 都一起存储在客户端上,而且所有 Cookie 都会随着对该站点发送的任何请求一起发送到服务器。也就是说,一个站点中的每个页面都能获得该站点的所有 Cookie。但是,可以通过两种方式设置 Cookie 的范围:
将 Cookie 的范围限制到服务器上的某个文件夹,这允许您将 Cookie 限制到站点上的某个应用程序。( Cookie 的 Path 属性)
HttpCookie appCookie = new HttpCookie("AppCookie");
appCookie.Value = "written " + DateTime.Now.ToString();
appCookie.Expires = DateTime.Now.AddDays();
appCookie.Path = "/Application1";
Response.Cookies.Add(appCookie);
将范围设置为某个域,这允许您指定域中的哪些子域可以访问 Cookie。
Response.Cookies["domain"].Value = DateTime.Now.ToString();
Response.Cookies["domain"].Expires = DateTime.Now.AddDays();
Response.Cookies["domain"].Domain = "support.contoso.com";
**如果要多个子域共享Cookie,则将子域中的Cookie的Domain值设置为主域的
Response.Cookies["domain"].Value = DateTime.Now.ToString();
Response.Cookies["domain"].Expires = DateTime.Now.AddDays();
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(-);
修改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();
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(-);
}
Response.Redirect(redirect + "?AcceptsCookies=" + acceptsCookies,
true);
}
Session
asp.net 10 Cookie & Session的更多相关文章
- 10 Cookie/Session
JSP/EL入门 * SUN提供了开发WEB资源的技术 Servlet/JSP * response.getWriter().write(); ...
- Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别
2.8 Context 的使用Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求.响应.以及上文中的Session 和Application 等信息.可以使用此对象在网页之 ...
- ASP.NET中的Session怎么正确使用
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- Asp.net操作cookie大全
实例代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...
- ASP.NET里的Session详细解释
Session模型简介 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器建立连 ...
- ASP.NET中的Session怎么正确使用[转]
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- 【译文】漫谈ASP.NET中的Session
最近这两天被一个Web Farm环境下的Session处理问题虐得很痛苦,网上到处找解决方案,在无意中翻看到这篇文章,感觉很不错,顺手查了一下,貌似没有现成的译文,于是一咬牙一跺脚把这篇文章翻译出来了 ...
- ASP.NET 中的 Session 怎么正确使用
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- Cookie/Session机制详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
随机推荐
- python Telnet通讯
摘要: python中telnetlib模块的使用: http://blog.csdn.net/five3/article/details/8099997 python实现telnet: http:/ ...
- 【JDBC】使用Spring提供的JDBCTemplate通过PrepareStatement向MySql数据库插入千万条数据,耗时32m47s,速度提升有限
数据库环境还和原来一样,只是从Statement换成了PrepareStatement,都说PrepareStatement因为预编译比Statement快,但是实际运行真快不了多少. 代码如下: p ...
- Java并发包同步工具之Exchanger
前言 承接上文Java并发包同步工具之Phaser,讲述了同步工具Phaser之后,搬家博客到博客园了,接着未完成的Java并发包源码探索,接下来是Java并发包提供的最后一个同步工具Exchange ...
- CentOS linux7 磁盘分区
常用命令 df [选项] [文件] -a 显示全部文件系统 -h 方便阅读方式显示 -l 只显示本地文件系统 -T 显示文件系统类型 fdisk /dev/sda1
- react中回车enter事件处理
对于常见的搜索需求业务场景,用户输入完成后,点击enter事件请求数据,要求不提交页面,实现数据局部更新,这需要用到react中的表单Forms. 处理方法: (1)html书写 form标签中去掉a ...
- js复选框实现全选、全不选、反选
复选框为checkbox对象 通过input就可以将一个简单的复选框呈现在页面上 <input type="checkbox" /> 要实现的大概就是这样一个页面 思路 ...
- substr 字符串截取
<!DOCTYPE html> <html> <body> <?php echo substr("Hello world",0,10).& ...
- 012-数据结构-树形结构-哈希树[hashtree]、字典树[trietree]、后缀树
一.哈希树概述 1.1..其他树背景 二叉排序树,平衡二叉树,红黑树等二叉排序树.在大数据量时树高很深,我们不断向下找寻值时会比较很多次.二叉排序树自身是有顺序结构的,每个结点除最小结点和最大结点外都 ...
- MySQLdb User's Guide
MySQLdb MySQLdb-1.2.2 API documentation http://mysql-python.sourceforge.net/MySQLdb-1.2.2/ MySQLdb U ...
- CMDB项目
实现功能 邮箱验证码注册 图片验证码登陆 生成验证码图片,前端请求图片: 获取验证码字符串,防入当前session: 获取前端用户名.密码.验证码: 判断验证码是否匹配,判断用户名和密码是否匹配. 设 ...