惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - ~在思考中沉淀~

VS2005中通过code snippet定制类模板 寻找合租的朋友;-) [晴,天气不错]咖啡罐上的灰尘 辛苦的周末~ 结合Web Services和Windows Services定期执行Asp.Net代码 可怕的春运,烦人的火车票! RSS Reader\Workflow Lite\User Manager for Sharepoint以及一点想法 - ~在思考中沉淀~ 创建自定义的Visual Studio项模板 微软推出Microsoft Exchange Server Best Practices Analyzer Tool 有要Gmail的吗?;)[已结束!] 科技对生活的影响 WhoIsOnline ;) - 解读CNForum源码中在线用户统计 创建VS.Net外接程序时遇到的问题 开始GMail之旅 .Net和Windows应用程序调试[更新至2004-12-29] 学习SQL Server全文索引 惊喜->监护期 悲哀的晚上 my代码分析器
分析更新LastActivity的过程-补Who is online
~在思考中沉淀~ · 2005-01-08 · via 博客园 - ~在思考中沉淀~

[这篇Post是对WhoIsOnline ;) - 解读CNForum源码中在线用户统计的补充,继续分析系统更新LastActivity的过程。如果对上下文不清楚,请参见前文。]
有朋友看到我前面的WhoIsOnline ;) - 解读CNForum源码中在线用户统计,对其中如何判断用户是否Activity(活动)提出了疑问。这个问题在上次分析的过程没有深究,想当然的认为系统肯定是在用户进行一些操作时更新了数据库中用户最后Activity的时间。
但是到底是怎么实现的?
如前面的分析说的WhoIsOnline(pastMinutes)方法调用了存储过程forums_Users_Online,在这个存储过程中使用的一个关键数据就是forums_UsersOnline表中的LastActivity字段。那么只要注意系统如何更新这个字段不就可以了吗?
使用SQL Server中显示表相关性的功能,得到与forums_UsersOnline表有相关性的存储过程(肯定是某个存储过程更新了这表啊)。结果如下图:

哦,原来有两个存储过程forums_system_UsersIsOnline和forums_Users_Online依附于这表,而且前者我们已经知道,只需要知道看看后面这个存储过程就可以了。
查看存储过程forums_system_UsersIsOnline,发现其中有这样语句:
IF EXISTS(SELECT UserID FROM forums_UsersOnline WHERE UserID = @UserID)
  UPDATE forums_UsersOnline SET LastActivity = GetDate(), LastAction = @LastAction WHERE UserID = @UserID
 ELSE
  INSERT INTO forums_UsersOnline VALUES (@UserID, GetDate(), @LastAction)
OK!就是这里修改了forums_UsersOnline表的LastActivity字段为GetDate()。恩,只要继续查找解决方案看到底是那段代码调用了存储过程forums_system_UsersIsOnline就可以啦~!轻松搞定,嘿嘿!
马上在解决方案中查找forums_system_UsersIsOnline,结果是————“匹配文件:0”!!
为什么会这样呢??

此路不通,只有换条路喽~ 解决方案中查找不到调用forums_system_UsersIsOnline的地方,那还有什么地方可能调用这个存储过程呢???(开动~~~)
系统中实现数据访问的全部是存储过程,那么有没有可能是哪个存储过程间接的调用了forums_system_UsersIsOnline呢?
继续查看forums_system_UsersIsOnline的相关性,唉~~,没有对象是依附于这个存储过程的(后话:怀疑是不是无法显示存储过程之间的相关性呢!)。此路有不通!
不过这时突然发现一个问题:其实应该不用这么麻烦啊!只要注意哪些操作会影响LastActivity值就可以了,然后分析相应操作的代码不就可以吗!。
于是打开查询分析器(select * from forums_UsersOnline)、SQL事件探察器。
使用注册的用户登录后,查询分析器找到并记录下此时的LastActivity值,随便查看一个版块,再次查找LastActivity值,发现较前面值已经发生变化了。也就是说刚才的操作中某个地方更新了forums_UsersOnline表的LastActivity字段。
重现刚才的操作,并启动跟踪,得到跟踪记录如下图:

检查刚才的操作中所调用的存储过程,发现在存储过程forums_User_Get中有
EXEC forums_system_UserIsOnline @UserID, @LastAction, @IPAddress
。原来就是这里更新了LastActivity值!
在解决方案中查找发现SqlDataProvider类的GetUser方法调用了这个存储过程,继续查找使用了GetUser方法的地方。
好多啊~也就是系统在用户触发某些操作时通过GetUser方法更新了LastActivity(如果你关心到底是哪些时机更新的,就自己查看代码喽~)。
至此,系统的实现过程就基本清楚了!

总结:
在分析的过程中绕了弯路,其实只要明确“系统肯定是在用户进行某些操作时更新了LastActivity”这一点,并且及早的使用Sql事件探察器问题就可以很快解决了。