主要是修改在线字段isOnLine 里面的值,
判断如果页面在10分钟之内没有刷新,就把update 修改isOnLine 字段里的值现在的问题就是.net怎么计算时间间隔用“ DateTime.Now-Rs["LoginDate"]”
没有用 ,求各位大神指教....net时间间隔

解决方案 »

  1.   

    用js可以控制时间 settimeout
      

  2.   

    一个简单的实现:在页面中放置一个服务器button控件,设置style:display:none, 然后在js  settimeout 方法中,调用button的click方法,
    docutment.getElementById('xx').click()然后计算时间间隔什么的。
      

  3.   

    把session过期时间设为10分钟不行吗??
    session丢失了 就表明他至少十分钟没有做操作了  自动掉线了
      

  4.   


    确实,只要了解下session的存储,可以用数据库存储session,加上一个作业就基本上可以实现了。在服务端也可以知道那些用户在线,但是有一点就是,不能保证100%准确。
      

  5.   

    乃们压根没理解楼主的意思,session过期只是表面某个签名失效而已,楼主是说鼠标没有操作(比如电脑面前的用户离开电脑10分钟,这期间如果没有回来动键盘说鼠标什么的,哪怕没有对系统界面有任何处理,页面自动失效跳转,或者加个全屏黑框遮罩),你搞session10分钟,这下好了每隔10分钟登录一次,蛋疼的要死。
    这是完全通过js来处理的,用settimeout每隔一段时间捕获鼠标的位置,然后用js的cookies方法存储到cookies里面,然后比对,如果和上次的记录间隔超过10分钟都是一样就最对应处理(黑框全屏遮罩或者注销登录)
      

  6.   

     大神 这要用到ajax吗 能说具体一点吗 谢谢了
      

  7.   


    那像你说的 如果用户刷新了页面 但是鼠标一直没动十分钟后,刷了好多次 鼠标都没动 也就是存cookie的坐标也没变
    那你是判断他掉线还是在线呢个人觉得最实用最简单的就是session来控制
    如果十分钟之后再来操作  就来提醒操作超时
      

  8.   

    把用户的信息存到session里面,例如session["user"]=用户信息。
    在页面的每次操作的时候,都去判断这个值是不是为null,为null说明超时了,
      

  9.   

    我想用ajax异步传输,js里面获取当前时间MyTime 在ajax里面判断如果( MyTime-Rs[LoginTime] )时间间隔大于10分钟则退出登录并把user表里面的IsOnLine改为0(update),不知道可行不可行啊,各位大神有没有更好的方法......
      

  10.   

    用TimeSpan,示例
    TimeSpan ts = dTimeEnd - dTimeServer
      

  11.   

    建议用JS来Ajax来请求后台。从用户打开页面开始计时到10分钟就请求某个页面然后更新数据库。这样再打开新的页面或本页重新打开后就又开始重新计时。可以实现LZ想要的效果。
      

  12.   

    把session过期时间设为10分钟不行就行了啊!
      

  13.   

    现在手上正在做一个 CMS 系统。。
    前段时间也纠结过楼主的问题。。自己琢磨的解决方法是:
    设置 Session 过期时间
    并在 全局配置文件 中配置 SessionEnd 方法。测试的时候关闭浏览器是可以的断电、死机、断网、结束进程、这些没测试过
      

  14.   

    js通过ajax调用后台的方法
     
    session时间也可
      

  15.   

    session毕竟不是很安全,建议使用js计时
      

  16.   

    建立一个临时XML,保存临时用户登录信息,里面2个值,用户名,最后活动时间。
    每次按需求分析的用活动,更新XML最后用户时间
    建立一个Windows Services,写个每10分钟的计时器对XML访问,最后活动时间与Windows Services访问时间大于10删除XML该用户记录,同时更新数据库信息。
    如果你觉得可能用户在线量比较大,比如10W+,你可以按需求把XML分解成多个文件,在Windows Services里动态建立多个计时器,来访问
      

  17.   

    关键是要修改数据库表的字段isOnLine 0/1 啊
      

  18.   

    页面用js的settimeout(定时10分钟)定位到一个退出页面。如果用户10分钟没操作,是会跳转到这个退出页面的(你可以在这个页面update数据库)。如果中间用户刷新页面了,那么js会重新计时。
    另外如果用这样的方法,你需要考虑一下页面是不是有文本编辑这样的耗时的功能,如果有的话,需要JS检测键盘事件,如果中间按下了键盘按键,JS重新计时。
      

  19.   

    神理论
    存储在服务器端的session不如运行在客户端随便都能改的js安全
      

  20.   


    //WebConfig
    <!--在 system.web 节点中设置-->
    <system.web>
    <!--
                设置Session 保存的模式和过期时间
        -->
    <sessionState mode="InProc" timeout="600"></sessionState>
    <system.web>//添加全局配置文件 Global.asax
      protected void Session_End(object sender, EventArgs e)
      {
           //此处写 Session 丢失要执行的 Code
           // string loginName = Session["LoginName"].ToString();
           // UserBll.UpdateUserLoginStatus(loginName);
      }
    可能也会有 BUG 没有发现,大家有好建议还请指教,我也想做的更好一点。。 
    另外,JS 监听浏览器关闭事件貌似对浏览器的兼容很不好,而且在强制结束进程的时候好像也不能被触发。。
      

  21.   

     <script language="javascript" type="text/javascript">
            setTimeout('window.close();', 10000);
                  }
        </script>
      

  22.   


    因为 Session 机制的原因,会导致 Session 很容易丢失。比如说 IIS 异常重启,浏览器关闭,服务器端修改了配置文件等等,都会导致 Session 丢失。。所以 100% 准确是不可能的。  
    以上纯属个人观点,不喜勿喷。。
      

  23.   


    上面都说是数据库存session了,你说的这些全都不会出现
      

  24.   

    session和cookie都可以,如果无关紧要那就用cookie就行了
      

  25.   

    1.页面加载时,注册鼠标滑动事件,每次滑动都给当前页面的全局变量 moustime赋当前时间值。
    2.在页面加载时,做个定时器,每10分钟判断moustime 和当前时间的间隔是否大于10分钟。若为true,说明10分钟内鼠标未移动,进行ajax操作,向服务器发送用户id等其他东西,服务器进行连接注销。并给用户弹窗断开连接。
      

  26.   


    LZ 貌似没说过 Session 存在数据库中吧只是根据Session 来更改User 的LoginStatus、、、