Asp.net夜话之二:asp.net内置对象
准确地说,asp.net并没有内置对象这一说,jsp里确实把request、response这些当作jsp的内置对象,这里只不过是借用了一下jsp的说法而已。上面提到的很多都是在做asp.net开发时无需new就能使用的对象(类似的还有很多,在asp.net中所有的网页都是继承自System.Web.UI.Page这个类,上面的提到多是Page类的属性)。本文介绍System.Web.UI.Page类的几个常用属性,如Request、Response、Server、Session、Cookie、Application,并讲述了及表达式用法。

解决方案 »

  1.   

    Session是当前连接的会话,不能取到其它连接的吧.用cache或static才是全局的吧
      

  2.   

    将已登录用户的列表存入session应该可以,如果只存一个当前用户的话,不知道可不可以搞
      

  3.   

    Session
    Session对象用来保存与特定用户相关的信息,Session中的数据保存在服务器端,在客户端需要的时候创建Session,在客户端不需要的时候销毁Session,使它不再占用服务器内存。前面说了服务器并不管客户端是否依然存在,因而它也无法确定客户端什么时间不再使用它,但是如果在客户端不再用的时候不及时销毁Session的话,服务器很快就会内存不足。为了解决这个问题,给Session加了一个生命周期,当服务器发现Session超过了它的生命周期,就会释放该Session所占用的内存空间。在asp.net中Session的默认生命周期是20分钟,也就是当我们在9:00的时候设置了一个Session,如果在9:20之前客户端没有任何请求,那么它的生命周期就到9:20分钟结束。但是一旦用户在9:19又向服务器发送了一个请求,那么这个Session现在的生命周期就是在当前时间的基础上再加上20分钟,也就是此时这个Session的生命周期是到9:39结束。
    Session具有以下特点:
    Session中的数据保存在服务器端;
    Session中可以保存任意类型的数据;
    Session默认的生命周期是20分钟,可以手动设置更长或更短的时间。
      

  4.   

    不可能取得所有的Session值,只能取得一个。建议用application去取,不过占资源
      

  5.   

    session放入hashtable里再循环,统计在线用户
    参考
    http://www.cnblogs.com/vagerent/archive/2008/08/27/1277373.html
    http://www.cnblogs.com/Hedonister/archive/2005/04/16/138821.html
      

  6.   

    呵呵,说一个有趣的事情,你可以自己写程序测试一下:当你在页面上回发,我们都知道通常我们的代码所在的当前页面对象是重新建立的(页面的生命周期)。但是,this.Page.Cache并没有变化,也就是说在这个新的Page对象中所取道的Cache对象仍然是上一次(看上去)同一页面处理时的同一个Cache,实际上所有用户请求下的Cache都是同一个。那么Session呢?实际情况是,Session也是新建的对象。当你在页面上把一个对象写入Session集合,然后页面在客户端被重新提交到服务器端,你再从Session集合中(使用同样的key值)可以得到上一次写入的那个对象。但是你要知道的一件事是,此时的Session对象跟上一次的Session根本不是同一个Session对象。尽管你的代码语法看上去很想你是例如Session集合写入对象,然后又利用Session集合读出对象,但是这个两个Session根本就是两个对象,而不是同一个对象。这说明什么呢?Session我很少碰,因为它在生产服务器(而不是你的开发用的电脑上)往往会在10分钟就“丢失”。但是,如果要碰的话,我知道它包装的远比Cache要繁复、动态的多,不是那么好抛析开底层来利用的。
      

  7.   

    如果只存用户名可以用 list<string> 放到一个caceh里面或是application里面。
    如果需要用户名和姓名的话可以使用Dictionary<string,string>  同样放在caceh里面或是application里面。
      

  8.   

    如果你要一个所谓“全局”集合,你随便找一个class,里边初始化一个static的集合变量,那么你在任何程序部分就都能访问这个集合了。实际上,在asp.net只能给无需使用application集合(那个也确实经常“锁”死自己),使用一个static变量就可以。为什么还保留Application?这是因为6年前正式发布asp.net的时候为了asp程序员而设计的钓饵,因为asp程序员(那时候)不懂.net编程的习惯。在真正的asp.net应用中,你只要在Global.asax或者自己的业务类中设置static对象就可以全局访问了。因此,你可以在任何可以方便访问的class中定义一个static的集合变量,然后你的注册和注销两段程序分别向这个集合Add或者Remove用户就可以了。不过,要知道web变成不同于c/s编程。web应用随时会被重新启动,因此static变量就跟session集合一样,是随时会丢失的。这个情况通常发生在负载很高的服务器上,例如过年过节的时候。所以合格的程序员写出来的程序是顺应web服务程序这种经常重启的方式而设计的,而不是按照c/s程序的那种方式设计的。
      

  9.   

    在asp.net只能给无需使用application集合(那个也确实经常“锁”死自己)  -->  在asp.net无需使用application集合(那个也确实经常“锁”死自己)
      

  10.   

    Session对象用来保存与特定用户相关的信息,Session中的数据保存在服务器端,在客户端需要的时候创建Session,在客户端不需要的时候销毁Session,使它不再占用服务器内存。前面说了服务器并不管客户端是否依然存在,因而它也无法确定客户端什么时间不再使用它,但是如果在客户端不再用的时候不及时销毁Session的话,服务器很快就会内存不足。为了解决这个问题,给Session加了一个生命周期,当服务器发现Session超过了它的生命周期,就会释放该Session所占用的内存空间。在asp.net中Session的默认生命周期是20分钟,也就是当我们在9:00的时候设置了一个Session,如果在9:20之前客户端没有任何请求,那么它的生命周期就到9:20分钟结束。但是一旦用户在9:19又向服务器发送了一个请求,那么这个Session现在的生命周期就是在当前时间的基础上再加上20分钟,也就是此时这个Session的生命周期是到9:39结束。 
    Session具有以下特点: 
    Session中的数据保存在服务器端; 
    Session中可以保存任意类型的数据; 
    Session默认的生命周期是20分钟,可以手动设置更长或更短的时间。