一个用户登录以后生成一个guid,将这个guid存在客户端(cookie里),并且将guid插入到服务器端的Dictionary<string,DateTime>(guid,最后操作时间)。
当用户发送一次服务器请求以后,从cookie里获取这个guid,然后去更新Dictionary<string,DateTime>里对应guid的最后更新时间。
另外,在服务器端专门有一个线程去扫描这个Dictionary<string,DateTime>,删除timeout的记录(根据最后操作时间来判断)。
我不知道iis的session是怎么实现的?不知道这样写,效率上有没有iis的高。iis的session有个弊端,多个站点无法共享session,而且用户数太多的话,很占用服务器资源。我自己这样写的话,以后可以存到数据库里去。

解决方案 »

  1.   

    ajax通过timer轮询,超出时间范围修改状态
    用户登录后设置状态,使用数据库等保存
      

  2.   

    道理应该是差不多的,如果不存入对象类型的数据,自己写Session功能更方便。
    另外,MSDN也有一个自定义的例子http://msdn.microsoft.com/zh-cn/library/aa479313.aspx
      

  3.   

    以key/value的形式,key用guid,value里一般都需要存一些什么东西?除了一个最后操作时间之外,还需要存一些什么东西,根据各位的经验来看。
      

  4.   

    应该没有session的效率高,,毕竟你这个还需去取cookie(这步应就和session效率可能就要低了吧),取晚之后,还要再执行一个插入动作,也是需要时间的
      

  5.   

    Dictionary这个就是个hashtable,我想检索数据是否存在速度是蛮快的。
      

  6.   

    无论是从cookie还是从数据库中取guid都会耗时。session一般是从进程内取数据,相对来说会更快,当然,缺点就是不能跨多台服务器存取session,也比较耗服务器内存。所以,对于大访问量的,一般都是有状态服务器。
      

  7.   

    一般的session也是基于cookie的。
      

  8.   

    一般的Session不照样也是从cookie里取sessionid的吗
      

  9.   

    asp.net session 默认也是用 cookie 实现的,
    一般是通过定制 session 存储来实现跨域, 跨虚拟目录的 session 机制,使用 asp.net, 这些底层的机制还是尽量使用原生的好,
    虽然不喜欢 asp.net 的控件(渲染机制),
    但 asp.net 对 http 的封装还是很方便的
      

  10.   

    session啊,
    一个机器上登多个账号,前面登的账号被后面的冲掉了
    同一个账号可以在不同的地方登陆,
    这两个基本的问题都没有完成啊,
    你这个高科技不更加不懂了。
      

  11.   

    SESSION一样可以存放到数据库里
      

  12.   

    不是说session存到哪里的问题。我是说实现会话(Session)的原理
      

  13.   

    一个机器上登多个账号,前面登的账号被后面的冲掉了 开不同IE不就行了
    同一个账号可以在不同的地方登陆,锁定IP不就行了
      

  14.   

    那大概就是这样的吧,总之就是将一个类似通行证的东西交给用户就行了,而和通行证绑定在一起的相关信息则存放在服务端。
    你现在只是实现了Dictionary<string,DateTime>,但如果我想往SESSION里面存放object怎么办?
      

  15.   


    asp.net的session不需要读取cookie吗?另外asp.net还提供了将session存到sqlserver的功能,只要修改一下web.config..
      

  16.   

    感觉session和缓存的机制感觉差不多,自定义一个SessionObject类型,用 Dictionary<string, SessionObject>就可以了吧。class SessionObject{
       string SessionId{get;set;}
       DateTime Expires {get;set;}
       object Value{get;set;}
    }效率上没做过对比,不说了..
      

  17.   

    通行证就是一个guid,存在客户端cookie。我用Dictionary<string,DateTime>,guid就是key,ExpireTime就是value。用户带着guid访问服务器,我就去更新相对应的ExpireTime。
    你们说用Dictionary<string,object>,这个object里要存放一些什么东西。我没这方面的经验,请大家明示。
    谢谢。