【www.gdgbn.com--php应用】

asp教程.net httpapplication 与 session(https教程essionstate)详解


application对象是在应用程序中共享的,所有上线的饿用户都可以对application对象进行修改,只有应用程序结束后它才消失.而session对象主要是针对用户个人的对象,当用户上线时,服务器就会给用户创建session,当用户下线时,这个对象就会释放.application对象的lock主要是为了锁定对应用程序状态的访问来促进访问同步.拿购买火车票来说吧,当售票员卖票时,就必须锁定这张票,如果不锁定的话,这个时候可能同个售票员也会卖这张票的,用lock就是防止出现这种现象的.

 

提供对会话状态值以及会话级别设置和生存期管理方法的访问。

类型:system.web.sessionstate.httpsessionstate
asp.net教程 提供了会话状态管理,使您可以根据多种请求存储与唯一浏览器会话相关联的信息。 您可以存储由键名或数字索引引用的值的集合。 您可以使用 httpsessionstate 类访问会话值和功能,该类可通过当前 httpcontext 的 session 属性或 page 的 session 属性进行访问。
会话数据通过唯一标识符与特定浏览器会话相互关联。 默认条件下,该标识符存储在浏览器的不过期会话 cookie 中,但是您也可以在应用程序配置的 sessionstate 元素中,将 cookieless 特性设置为 true 或 useuri,以此方法配置应用程序,将会话标识符存储在 url 中。 您可以通过指定 cookieless 特性的 usedeviceprofile 值,让 asp.net 确定浏览器是否支持 cookie。 您也可以为 cookieless 特性指定 autodetect 值,让 asp.net 确定是否为浏览器启用 cookie。 如果指定 usedeviceprofile 后浏览器支持 cookie,或指定 autodetect 后浏览器启用了 cookie,则会话标识符将存储在 cookie 中;否则它将存储在 url 中。
第一次请求过程中会话将会启动,并且在达到 timeout 属性中指定的分钟数之前如果浏览器未发送新的请求,当前的会话值将持续有效。 新会话开始后将引发会话 start 事件。 会话启动时您可以使用此事件执行任何其他工作,例如设置默认会话值。 如果会话超时,将调用 abandon 方法,或者关闭 asp.net 应用程序,此时将引发会话 end 事件。 您可以使用此事件执行任何必要的清理操作。 仅当会话状态 mode 被设置为 inproc 时,才引发 end 事件。
若要提高性能,只有数据确实存储在 session 对象中后,使用 cookie 的会话才会分配会话存储。
会话状态的持续性不会跨越 asp.net 应用程序的边界。 如果浏览器定位到另一应用程序,则当前的会话信息对新应用程序不再有效。
默认条件下,会话值存储在 web 服务器的内存中。 您也可以把会话值存储在 sql server 数据库教程、asp.net 状态服务器或自定义服务器中。 一旦 asp.net 或 iis 进程或 asp.net 应用程序重新启动,这种举措可以保存会话值,并且它还可以使会话值在网络场的所有服务器间可用。 要配置这种行为,请在应用程序配置的 sessionstate 元素中把 mode 特性设置为有效的 sessionstatemode 值。
会话状态可能会过期(默认情况下,在处于不活动状态 20 分钟后过期),而在其中存储的信息可能会丢失。可以使用 sessionstate 配置节的 timeout 属性控制会话状态生存期。
常用方法和属性:
常用方法:

// 向会话状态集合添加一个新项。
session.add(usernamezz);

// 删除会话状态集合中的项。再次获取时返回 null
session.remove(username);
session.removeat(0);

// 从会话状态集合中移除所有的键和值。
session.clear();
session.removeall();

// 取消当前会话,开始新的会话,即一个全新的session对象
// 注:一般在会话超时时调用,可以设置新的会话是否使用旧sessionid
session.abandon();诡异方法:
// 定义一个数组,有长度就行,值无所谓
object[] objs = new object[10];

// 将会话状态值的集合复制到数组中,从数组的指定索引处开始,索引之前的值不变,索引之后的被覆盖
// 数组长度不够将会抛数组越界异常,很鸡肋。。。
session.copyto(objs,5);

//怎么填充,怎么取,理论上应该返回值,不过我调试多次,返回的都是键,坚决不用此方法。
object obj5 = objs[5];  常用属性:
// 按数字索引获取或设置会话值。 item[int32] (读写属性)
session[0] = zz;
object obj1 = session[0];

// 按名称获取或设置会话值。 item[string] (读写属性)
session[username] = zz;
object obj2 = session[username];

// 获取会话状态集合中的项数。
int count = session.count;

// 获取存储在会话状态集合中所有值的键的集合。
// using system.collections.specialized;
nameobjectcollectionbase.keyscollection keys = session.keys;

// 获取会话的唯一标识符。
string id = session.sessionid;

//获取一个值,该值指示会话是否是与当前请求一起创建的。
bool isnewsession = session.isnewsession;

//获取一个值,该值指示会话是否为只读。
bool isreadonly = session.isreadonly;

//获取一个值,该值指示会话 id 是嵌入在 url 中还是存储在 http cookie 中。
bool iscookieless = session.iscookieless;

//获取一个值,该值指示是否为无 cookie 会话配置应用程序。默认值为 usecookies。(只读)
httpcookiemode hm = session.cookiemode;

//获取当前会话状态模式。 默认值为 inproc  (只读)
sessionstatemode ssm = session.mode;

// 获取并设置在会话状态提供程序终止会话之前各请求之间所允许的时间(以分钟为单位,默认值为 20)。
int timeout = session.timeout;

本文来源:http://www.gdgbn.com/jiaocheng/28683/