如何能知道指定Session用户当前是否在线
比如我如何能知道Session["nickName"]="YaYa" 的用户当前是否已经登录在我的网站上了····
------解决方案--------------------HTTP协议注定无法直接实现你的要求。
办法有,但非常不值得。
比如把session超时设置为10s,然后在客户端使用ajax定时访问某个特定页面,在该页面更新session .
服务器性能消耗会提高不少。
------解决方案--------------------你的网站的每个页面载入时都把刚但session指定的用户/当前时间写入数据库.
你要判断的时候判断这个用户对应的最后活动时间(一般10-20分钟内都作为在线),但这样显然不会很准,但一般的论坛/网站之类的这样的精度就可以了
------解决方案--------------------1.用反射的法子,来遍历session,但这个法子走的是偏门
2.建立和撤销session的时候,维护一个列表,这样查表就知道了
------解决方案--------------------if(Session["nickName"]!=null)
{
if(Session["nickName"].ToString() = "YaYa")
}
这样子行不行
------解决方案-------------------- 用cookies呢,原理和session差不多,
------解决方案--------------------没做过,系统能读用户的Session信息吗?
关注,学习一下
------解决方案--------------------让客户端反应到的你的网站上,而不是你主动去探
------解决方案--------------------不懂,关注,学习...
------解决方案--------------------帮顶,关注!
似乎7楼说的有点道理!
------解决方案--------------------.........
------解决方案--------------------期待
------解决方案--------------------比如我如何能知道Session["nickName"]="YaYa" 的用户当前是否已经登录在我的网站上了····
if(Session["nickName"]!=null)
{
if(Session["nickName"].ToString() = "YaYa")
}
应该就是这意思呀
------解决方案--------------------好像不行,再有用户登录Session值就变了,还是把值存到一个表或string类型数组里,然后在他推出的时候将其名再删除,这样遍历表或数组就能知道了
------解决方案--------------------
我的经验是自己写一个统计类(单态容器类),在Session_Start()和Login()中添加容器中的Session信息,在获取Session信息时更新容器中对应Session条目的最近活动时间,在Logout中删除容易中相应的Session条目,另外容器类提供相关函数来统计当前在线的情况,还要考虑到如果容器中的某个Session长时间未活动,那么得有超时机制来处理。
C# code
/// <summary>
/// 在线用户信息管理类
/// </summary>
public class OnlineManage
{
private static OnlineManage _instance = new OnlineManage();
//private Dictionary<int, OnlineUserInfo> _onlineUserList = new Dictionary<int, OnlineUserInfo>();
private Dictionary<string, OnlineUserInfo> _onlineSession = new Dictionary<string, OnlineUserInfo>();
public const int Timeout_Minutes = 20; //非登录会员在线用户过期时间
public const int Timeout_Minutes_Member = 40; //登录会员在线过期时间
private OnlineManage()
{
}
public void Clear()
{
lock(this)
{
//_onlineUserList.Clear();
_onlineSession.Clear();
}
}
/// <summary>
/// 获取当前在线用户总数(包含登录和未登录的)
/// </summary>
public int Count
{
get { return _onlineSession.Count; }
}
/// <summary>
/// 在线会员数
/// </summary>
public int MemberCount
{
get
{
int iRet = 0;
lock(this)
{
foreach (string _sKey in _onlineSession.Keys)
{
OnlineUserInfo oInfo = _onlineSession[_sKey];
if (oInfo == null)
{
_onlineSession.Remove(_sKey);
}
else
{
if (oInfo.UserID>0)
{
iRet++;
}
}
}
}
return iRet;
}
}
public OnlineUserInfo this[int UserID]
{
get
{
lock(this)
{
foreach (string _sKey i