在线时间计算的问题

ryhbgs 2015-02-06 02:25:30
用asp.net做了一个小的系统,需要记录会员登录后使用系统的在线时间,然后记录到数据库中,不知道如何实现,
请大侠们指教指教,谢谢啦!
...全文
322 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
guarentianxia11 2015-03-04
  • 打赏
  • 举报
回复
引用 12 楼 sp1234 的回复:
[quote=引用 10 楼 ryhbgs 的回复:] [quote=引用 3 楼 Z65443344 的回复:] 如果是想统计在线时间(比如类似QQ根据登陆时间计算级别) 那么加个心跳,登陆的时候插入一条记录,和登陆时间,心跳里更新退出时间
我很菜的,不知道心跳是什么,请帮助一下。[/quote] 你可以创建一个用户控件,例如叫做 HeartBeat.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HeartBeat.ascx.cs" Inherits="HeartBeat" %>
using System;
using System.Configuration;
using System.Data.SqlClient;

public partial class HeartBeat : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var sql = string.Format("if exists(select * from HeartBeat where SessionId='{0}') " +
            "update HeartBeat set Time='{1}' where SessionId='{0}'; else " +
            "insert HeartBeat(SessionId,Time) values ('{0}','{1}')", Session.SessionID, DateTime.Now.ToString("yyyy-M-d h:m:s"));
        using (var sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString))
        {
            var comm = new SqlCommand(sql, sqlconn);
            sqlconn.Open();
            comm.ExecuteNonQuery();
        }
    }
}
然后,把它拖入每一个aspx。[/quote] 大神的指导
ryhbgs 2015-03-04
  • 打赏
  • 举报
回复
引用 12 楼 sp1234 的回复:
[quote=引用 10 楼 ryhbgs 的回复:] [quote=引用 3 楼 Z65443344 的回复:] 如果是想统计在线时间(比如类似QQ根据登陆时间计算级别) 那么加个心跳,登陆的时候插入一条记录,和登陆时间,心跳里更新退出时间
我很菜的,不知道心跳是什么,请帮助一下。[/quote] 你可以创建一个用户控件,例如叫做 HeartBeat.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HeartBeat.ascx.cs" Inherits="HeartBeat" %>
[code=csharp]using System; using System.Configuration; using System.Data.SqlClient; 然后,把它拖入每一个aspx。[/quote] 非常感谢,我来试试!
小蜗牛1 2015-03-02
  • 打赏
  • 举报
回复
引用 12 楼 sp1234 的回复:
[quote=引用 10 楼 ryhbgs 的回复:] [quote=引用 3 楼 Z65443344 的回复:] 如果是想统计在线时间(比如类似QQ根据登陆时间计算级别) 那么加个心跳,登陆的时候插入一条记录,和登陆时间,心跳里更新退出时间
我很菜的,不知道心跳是什么,请帮助一下。[/quote] 你可以创建一个用户控件,例如叫做 HeartBeat.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HeartBeat.ascx.cs" Inherits="HeartBeat" %>
using System;
using System.Configuration;
using System.Data.SqlClient;

public partial class HeartBeat : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var sql = string.Format("if exists(select * from HeartBeat where SessionId='{0}') " +
            "update HeartBeat set Time='{1}' where SessionId='{0}'; else " +
            "insert HeartBeat(SessionId,Time) values ('{0}','{1}')", Session.SessionID, DateTime.Now.ToString("yyyy-M-d h:m:s"));
        using (var sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString))
        {
            var comm = new SqlCommand(sql, sqlconn);
            sqlconn.Open();
            comm.ExecuteNonQuery();
        }
    }
}
然后,把它拖入每一个aspx。[/quote] 高手,学习了
Rajesh_James 2015-03-02
  • 打赏
  • 举报
回复
这个问题的难点在于如何记录会员的下线时间
程序猿老曾 2015-03-02
  • 打赏
  • 举报
回复
在线时长是很蛋疼的问题~~~~主要在于结束登录这一点
king4323210 2015-03-02
  • 打赏
  • 举报
回复
在线时间统计根本没有意思。 最起码也要和业务挂钩,谁叫你做的,你找谁去。 骂他神经病。 这种一登陆,就算时间的,你以为是在挂QQ。 这种数据对后面的二次分析一点用处都没有
  • 打赏
  • 举报
回复
web页面的所谓心跳,就是把交互时间记录下来。并且当页面发呆时,你可以在使用一个 ajax 请求来(偷偷地)访问一下服务器来记录这个时间。 就是这样。
  • 打赏
  • 举报
回复
引用 10 楼 ryhbgs 的回复:
[quote=引用 3 楼 Z65443344 的回复:] 如果是想统计在线时间(比如类似QQ根据登陆时间计算级别) 那么加个心跳,登陆的时候插入一条记录,和登陆时间,心跳里更新退出时间
我很菜的,不知道心跳是什么,请帮助一下。[/quote] 你可以创建一个用户控件,例如叫做 HeartBeat.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HeartBeat.ascx.cs" Inherits="HeartBeat" %>
using System;
using System.Configuration;
using System.Data.SqlClient;

public partial class HeartBeat : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var sql = string.Format("if exists(select * from HeartBeat where SessionId='{0}') " +
            "update HeartBeat set Time='{1}' where SessionId='{0}'; else " +
            "insert HeartBeat(SessionId,Time) values ('{0}','{1}')", Session.SessionID, DateTime.Now.ToString("yyyy-M-d h:m:s"));
        using (var sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString))
        {
            var comm = new SqlCommand(sql, sqlconn);
            sqlconn.Open();
            comm.ExecuteNonQuery();
        }
    }
}
然后,把它拖入每一个aspx。
tongxuejie 2015-03-01
  • 打赏
  • 举报
回复
可以试试长连接 实现长连接要客户端和服务端都支持长连接
ryhbgs 2015-03-01
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
如果是想统计在线时间(比如类似QQ根据登陆时间计算级别) 那么加个心跳,登陆的时候插入一条记录,和登陆时间,心跳里更新退出时间
我很菜的,不知道心跳是什么,请帮助一下。
ryhbgs 2015-02-06
  • 打赏
  • 举报
回复
谢谢楼上各位,session实现不了。 js不知道如何实现?
於黾 2015-02-06
  • 打赏
  • 举报
回复
web一样可以加心跳 而且即使是winform的通信程序,也一样要加心跳,不能靠客户端退出给服务端发消息 万一客户端掉线/宕机/停电/网络断开,退出QQ的时候发不出消息呢?
xiaozhanger 2015-02-06
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
如果是想统计在线时间(比如类似QQ根据登陆时间计算级别) 那么加个心跳,登陆的时候插入一条记录,和登陆时间,心跳里更新退出时间
qq是可执行程序,好处理, 他要的是WEB的,差别还是比较大的
於黾 2015-02-06
  • 打赏
  • 举报
回复
引用 5 楼 iamwxj 的回复:
登陆的时候记录登陆时间,网页关闭的时候记录退出时间,这一时间段作为在线时间
记录"网页关闭"不靠谱 你怎么知道是网页关闭,而不是IE关闭,不是结束进程,不是计算机关机,不是停电,不是拔网线,不是交换机路由器停电
iamwxj 2015-02-06
  • 打赏
  • 举报
回复
登陆的时候记录登陆时间,网页关闭的时候记录退出时间,这一时间段作为在线时间
小蜗牛1 2015-02-06
  • 打赏
  • 举报
回复
可以利用js做一个计时器,网上有很多例子
於黾 2015-02-06
  • 打赏
  • 举报
回复
如果是想统计在线时间(比如类似QQ根据登陆时间计算级别) 那么加个心跳,登陆的时候插入一条记录,和登陆时间,心跳里更新退出时间
tcmakebest 2015-02-06
  • 打赏
  • 举报
回复
用户登录的时候记录下开始时间,然后每操作一次更新结束时间. 或者等SESSION过期时记录结束时间.
於黾 2015-02-06
  • 打赏
  • 举报
回复
记录会员登录后使用系统的在线时间,然后记录到数据库中 这东西有任何必要记录到数据库中? 在线时间=当前时间-登陆时间 不就是这样而已吗

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧