session对象
Session 对象用于存储用户的信息。存储于 session 对象中的变量持有单一用户的信息,并且对于一个应用程序中的所有页面都是可用的。 存储于 session 对象中的信息通常是 name、id 以及参数。服务器会为每个新的用户创建一个新的 Session,并在 session 到期时撤销掉这个 Session 对象。
事件:
Session_Start:会话开始
Session_End:会话结束
属性:
SessionID 唯一用户会话标识符
TimeOut 用户超时
LCID 本地标识符
IsNewSession 如果已使用当前请求创建会话,则返回True
Item 会话值得名称
Count 会话状态集合中的项目数
session的工作原理
(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。(Cookie就是服务器暂存放在你计算机上的一笔资料,例如我们登陆博客时,会把我们的登陆信息暂存在本地的cookie中,一段时间内我们不用再次登陆。)
(2)session开始:首先在Global.aspx中使用session_start()函数。
以统计网页访问总人数和在线人数为例:
//会话开始
protected void Session_Start(objectsender, EventArgs e)
{
Session.Timeout =1; //设置过期时间1分钟,默认是20分钟
Application.Lock();//控制并发
Application["count"] =(int)Application["count"]+1;//一个用户登陆+1
Application["total"] = (int)Application["total"] +1;//总人数+1
Application["online"] = (int)Application["online"] +1;//在线人数+1
Application.UnLock();//控制并发
}
(3)session结束:假如用户没有在规定的时间内在应用程序中请求或者刷新页面,session 就会结束。默认值为 20 分钟。可以设置 Timeout 属性更改过期时间。
//会话结束
protected voidSession_End(object sender, EventArgs e)
{
Application.Lock();
Application["online"] = (int)Application["online"] -1;//在线人数-1
Application.UnLock();
}
优点
如果要在诸多Web页间传递一个变量,那么用Session变量要比通过QueryString传递变量可使问题简化。
要使WEb站点具有用户化,可以考虑使用Session变量。你的站点的每位访问者都有用户化的经验,基于此,随着LDAP和诸如MS Site Server等的使用,已不必再将所有用户化过程置入Session变量了,而这个用户化是取决于用户喜好的。
你可以在任何想要使用的时候直接使用session变量,而不必事先声明它,这种方式接近于在VB中变量的使用。使用完毕后,也不必考虑将其释放,因为它将自动释放。
缺点
Session变量和cookies是同一类型的。如果某用户将浏览器设置为不兼容任何cookie,那么该用户就无法使用这个Session变量!
当一个用户访问某页面时,每个Session变量的运行环境便自动生成,这些Session变量可在用户离开该页面后仍保留20分钟,所以,如果在Session中置入了较大的对象(如ADO recordsets,connections, 等等),那就有麻烦了!随着站点访问量的增大,服务器将会因此而无法正常运行!
因为创建Session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用session变量将会导致代码不可读而且不好维护。
总结
对于使用 Session 变量既有优点,也有缺点。 还要从我们做的项目看,如果是高访问量的网站显然缺点很明显 , 但是如果只是简单的企业信息管理等小型的, 使用它们确实能使 Web 开发大大地简化。是否使用 Session 变量完全取决于 个人的 需要,无论使用与否,都要事先考虑其优缺点。