Asp.Net Cookie 和 Session 的编写、读取 和 删除
来源:互联网 发布:自动接听电话软件 编辑:程序博客网 时间:2024/05/22 13:12
一、Cookie(分两种操作方式)
(一)第一种操作方式
#region 第一种操作方式//(一)未带子健的 Cookie//1.编写(创建 和 修改 一样)HttpCookie cookie = new HttpCookie("userName");cookie.Value = "李春林";cookie.Expires = DateTime.Now.AddHours(1);Response.Cookies.Add(cookie);//2.读取if (Request.Cookies["userName"] != null){string userName = Request.Cookies["userName"].Value;userName = Server.HtmlEncode(userName);//确保恶意用户没有向 Cookie 中添加可执行脚本}//3.删除HttpCookie cookie = new HttpCookie("userName");cookie.Expires = DateTime.Now.AddHours(-1);Response.Cookies.Add(cookie);//(二)带子健的 Cookie//1.编写(创建 和 修改 一样)HttpCookie cookie = new HttpCookie("userInfo");cookie.Values["userName"] = "李春林";cookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(cookie);//2.读取if (Request.Cookies["userInfo"] != null){string userName = Request.Cookies["userInfo"].Values["userName"];userName = Server.HtmlEncode(userName);//确保恶意用户没有向 Cookie 中添加可执行脚本}//3.删除//3.1 删除子键的方式HttpCookie cookie=Request.Cookies["userInfo"];if (cookie != null){cookie.Values.Remove("userName");cookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(cookie);}//3.2 删除父键的方式HttpCookie cookie = new HttpCookie("userInfo");cookie.Expires = DateTime.Now.AddDays(-1);Response.Cookies.Add(cookie);#endregion
#region 第二种操作方式//(一)未带子健的 Cookie//1.编写(创建 和 修改 一样)Response.Cookies["userName"].Value = "李春林";Response.Cookies["userName"].Expires = DateTime.Now.AddHours(1);//2.读取(跟第一种方式一样)if (Request.Cookies["userName"] != null){string userName = Request.Cookies["userName"].Value;userName = Server.HtmlEncode(userName);//确保恶意用户没有向 Cookie 中添加可执行脚本}//3.删除Response.Cookies["userName"].Expires = DateTime.Now.AddHours(-1);//(二)带子健的 Cookie//1.编写(创建 和 修改 一样)Response.Cookies["userInfo"]["userName"] = "李春林";Response.Cookies["userInfo"].Expires = DateTime.Now.AddHours(1);//2.读取if (Request.Cookies["userInfo"] != null){string userName = Request.Cookies["userInfo"]["userName"];userName = Server.HtmlEncode(userName);//确保恶意用户没有向 Cookie 中添加可执行脚本}//3.删除//3.1 删除子键的方式(跟第一种方式一样)HttpCookie cookie = Request.Cookies["userInfo"];if (cookie != null){cookie.Values.Remove("userName");cookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(cookie);}//3.2 删除父键的方式Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(-1);#endregion
(三)注意
1.Cookie 只能存储字符串类型(String)的数据,并且是存在客户端的,不是存在服务端的。
2.不能直接修改 Cookie,删除 Cookie(即从用户的硬盘中物理移除 Cookie)是修改 Cookie 的一种形式。
3.每个 Cookie 通常限制为 4096 字节(即4KB大小,超过将不会添加该Cookie,但不会抛异常)。
4.每个站点一般最多可存储 20 个 Cookie,如果同一站点Cookie过多可以创建带子键的 Cookie。
5.在获取 Cookie 的值之前,应确保该 Cookie 存在;如果该 Cookie 不存在,将会收到 NullReferenceException 异常。
6.在设置 Cookie 的值之前,如果值包括分号(“;”),应该使用 Server.UrlEncode() 函数对其编码,否则前台使用 Cookie 时得到的值不完整。
7.如果值页面中显示 Cookie 的内容前,先调用 HtmlEncode 方法对 Cookie 的内容进行编码。这样可以确保恶意用户没有向 Cookie 中添加可执行脚本。
8.服务器端只能设置 Cookie 的过期时间,而不能获取 Cookie 的过期时间,因为浏览器每次发送请求也不会把过期时间发送到服务器。
二、Session
Session的增删改查非常简单,如下:
保存会话:
Session["userName"]="李春林";//保存,这里可以存储任意类型的数据,包括对象、集合等Session.Timeout=40;//过期时间40分钟
读取会话:
if (Session["userName"] != null){string userName = Session["userName"].ToString();}//这里为引用类型,可以直接强制转换为存放时的类型string userName = (string)Session["userName"];
Session.Abandon();
1.Session 可以存储任意类型的数据。
2.Session 属性的访问
在Web Forms的后台页面(Page)和 MVC的控制器(Controller)中 可以直接访问到Session属性
一般处理程序 中 可以使用 context.Session 访问
类中需要使用 HttpContext.Current.Session 访问
会话标识符:
默认情况下,SessionID 存储在浏览器未到期会话的 cookie 中。
通过在 Web.config 文件的 sessionState 节中将 cookieless 属性设置为 true,可以指定不将会话标识符存储在 cookie 中,将会存放在URL中传递,个人不建议这样使用(不安全、不方便 并且 会造成共享会话)。
会话状态事件:
ASP.NET 提供了两种帮助您管理用户会话的事件:Session_OnStart 事件和 Session_OnEnd 事件;前者在新会话开始时引发,后者在会话被放弃或过期时引发。
可以使用会话事件(Session_OnStart() 和 Session_OnEnd())统计在线人数。
注意:只有会话状态属性 Mode 设置为 InProc(默认值)时,才支持 Session_OnEnd 事件
会话状态模式:
ASP.NET 会话状态模式包括5种:InProc模式(进程内模式)、StateServer模式(状态服务器模式)、SQLServer模式、Custom模式(自定义模式) 和 Off 模式。
1.InProc 模式:会话状态存储在 Web 服务器上的内存中。
这是默认设置。唯一支持 Session_OnEnd 事件的模式。
2.StateServer 模式:会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。
需要启动服务名称为aspnet_state 显示名称为ASP.NET State Service的服务。并配置Web.config文件如下:
<configuration> <system.web> <sessionState mode="StateServer" stateConnectionString="tcpip=服务器名称:42424" timeout="40"/> </system.web></configuration>
本地服务器名称为: localhost 或者 127.0.0.1
在注册表里可配置是否运行远程连接 和 端口号,如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\Port
3.SQLServer 模式:会话状态存储到一个 SQL Server 数据库中。
需要在 SQL Server 上安装 ASP.NET 会话状态数据库,可以使用 Aspnet_regsql.exe 工具安装会话状态数据库 和 运行InstallSqlState.sql脚本。并配置Web.config文件如下:
<configuration> <system.web> <sessionState mode="SQLServer" sqlConnectionString="Data Source=LCL\SQLSERVER2012;Integrated Security=SSPI; timeout="40" /> </system.web></configuration>
Data Source=LCL\SQLSERVER2012 表示数据库的服务器名称为“LCL\SQLSERVER2012”。
Integrated Security=SSPI 表示使用Windows集成身份验证。
使用此模式可以确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于网络场中的多个 Web 服务器。
安装会话状态数据库后会创建aspnetdb和ASPState数据库,并且状态存储在系统数据库的tempdb数据库中的ASPStateTempSessions表里。
注意:需要运行SQLAgent服务(显示名称“SQL Server 代理”),并在数据库软件里的[SQL Server 代理]-[作业]里启动 ASPState_Job_DeleteExpiredSessions 作业。这样会自动清理过期的Session信息,如果不清理则SessionId一直存放在数据库,并且在服务器Session信息一直不会消失。
4.Custom 模式:允许您指定自定义存储提供程序。
5.Off 模式:禁用会话状态。
- Asp.Net Cookie 和 Session 的编写、读取 和 删除
- asp.net中Cookie的添加 读取 修改和删除
- ASP.NET的Cookie和Session !
- ASP.NET的Cookie和Session
- ASP.NET 如何读写Session和Cookie
- ASP.NET 之深入浅出Session和Cookie
- asp.net(一)session和cookie
- ASP.NET里session和cookie的区别
- ASP.NET里session和cookie的区别是什么?
- ASp.net中 Session和Cookie的用法
- ASP.NET中Cookie和session的使用
- ASP.NET里session和cookie的区别是什么?
- ASP.NET之Application、Session和Cookie的区别
- asp.net cookie和session的详细使用
- asp.net cookie和session的详细使用
- asp.net设置和读取Cookie
- .net Cookie和Session
- ASP的cookie和session区别
- The best hacker forums in the internet ( top 5 )
- JSP详解(二):九大内置对象
- 使用RTC调用WebService
- openwrt 驱动 hello world
- Java删除ArrayList中的重复元素的2种方法
- Asp.Net Cookie 和 Session 的编写、读取 和 删除
- GiraphV1.2之DiskMessage 运行设置
- Oracle创建数据库
- 算法——阶乘之和(数据溢出以及时间测试)
- 扑克牌洗牌
- iOS应用外搜索之 Core Spotlight 适配
- rman配置及rman常用命令操作
- struts2图片上传报错 findText cleanUpRequest StandardWrapperValve
- Oracle数据库体系结构、启动过程、关闭过程