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通过在服务器端 ...
随机推荐
- LeetCode 279. 完全平方数(Perfect Squares)
题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 1: 输入: n = 12 输出: 3 解释 ...
- leetcode-hard-array-149. Max Points on a Line -NO
mycode 不会.... 参考 因为每次遍历一个点,也就是i的时候,都是新建的一个lines,所以也就是考虑了k相同b不同的情况 最后gcd函数就求最大公约数,来解决斜率精度的问题 class S ...
- jeecg中列表点击单号跳入链接
效果如图:点击单号,跳到一个新的页面 1.首先列表给一个自定义的js: <t:dgCol title="业务编号" field="orderCode" ...
- kotlin之类构造器
Kotlin中类允许定义个主构造器和多个第二构造器. 主构造器就是类头的一部分,紧跟在类名的后面,构造器参数是可选的 package loaderman import loaderman.bar.Pe ...
- js 操作select和option常见用法
1.获取选中select的value和text,html <select id="mySelect"> <option value="1"&g ...
- 一百二十一:CMS系统之注册后跳转到上一个页面
实现功能,访问测试页面的时候,跳转到注册页面,注册成功后跳转到测试页面 使用参数:若是从其他地址跳转过来时,头部信息中会携带参数referrer,此参数为从从哪个地址跳转到当前地址的,若是直接从浏览器 ...
- kubernetes架构(2)
一.Kubernetes 架构: Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Kubernetes 服务. Master 节点 Master 是 Ku ...
- dede不同栏目调用不同banner图的方法
用顶级栏目ID 方法: <img src="{dede:global.cfg_templets_skin/}/images/{dede:field.typeid function=&q ...
- Kafka管理与监控——查看和重设消费者组位移
kafka 0.11.0.0版本丰富了kafka-consumer-groups脚本的功能,用户可以直接使用该脚本很方便地为已有的consumer group重新设置位移. 前提必须consumer ...
- cmake 在mac系统的安装
CMake是一个比make更高级的跨平台的安装.编译.配置工具,可以用简单的语句来描述所有平台的安装(编译过程).并根据不同平台.不同的编译器,生成相应的Makefile或者project文件.本文主 ...