讨论一下关于ASP.NET2.0环境中显示在线用户的办法,因为最近工作中遇到这个问题,虽然解决了,但是办法不好,而且不想使用MEMBER SHIP,因为感觉真的很麻烦,特别是对于我们的程序,权限设计比较复杂,希望大家可以说说自己的示在线用户de好办法@@@
解决方案 »
- jquery,$(this).text()得到内容,alert出来明明显示有空格,怎么用空格去替换怎么替换不掉,还是显示出空格 ,为什么呀?
- 类似开心农场
- dddd
- 讨论一下数据访问层用什么方式来写好
- treeview contextmenu从客户端到服务器端
- 关于TextBox的JavaScript实现
- 怎么在vs2005中实现像csdn社区这样的分页?
- 如何让文本框中内容大写?
- 在aspx.cs中如何编程来获取一个TextBox输入的上一次值和本次值?
- 一般在什么情况下使用try{}catch{}
- ★ 50分,再次请求正确的写发;<%# %>中这样写对吗?
- VS2005添加外部ASPX文件.和2003不一样.以前都提示创建代码文件的.
{
public string userName;
public string userId;
public string IP;
public DateTime lastActive;
public string lastUrl; public MemberOnlineInfo(string name, string id, string ip, DateTime lastactive, string lasturl)
{
userName = name;
userId = id;
IP = ip;
lastActive = lastactive;
lastUrl = lasturl;
} } public class MemberOnlineList
{
public static Hashtable memberList = new Hashtable(); public static bool IsOnline(string name)
{
return (memberList.ContainsKey(name)) ? true : false;
} public static void AddOnline(MemberOnlineInfo online)
{
memberList.Add(online.userName, online);
} public static void UpdateOnline(MemberOnlineInfo online)
{
memberList[online.userName] = online;
} public static void DeleteOnline() //超过20分钟的删除
{
DateTime now = DateTime.Now;
foreach(DictionaryEntry deChair in memberList)
{
if ((now - ((MemberOnlineInfo)(deChair.Value)).lastActive) > TimeSpan.FromMinutes(20)){
memberList.Remove(((MemberOnlineInfo)(deChair.Value)).userName);
}
}
}
} protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
string strName =string.Empty;
string strUid =string.Empty; if (Request.IsAuthenticated)
{
strName = User.Identity.Name;
strUid = Request.Cookies["uid"].Value;
}
else {
strName = Request.Cookies["uid"].Value;
} MemberOnlineInfo Online = new MemberOnlineInfo(strName, strUid, Request.UserHostAddress, DateTime.Now, Request.FilePath);
if (MemberOnlineList.IsOnline(strName))
{
MemberOnlineList.UpdateOnline(Online);
}
else
{
MemberOnlineList.AddOnline(Online);
} MemberOnlineList.DeleteOnline();
}
//显示在线的用户
public StringBuilder online=new StringBuilder();
protected void Page_Load(object sender, EventArgs e)
{ online.Append("<table cellSpacing=\"2\" cellPadding=\"2\" width=\"90%\" class=\"grid\">");
online.Append("<tr>");
online.Append("<th >User</th>");
online.Append("<th> </th>");
online.Append("<th>URL</th>");
online.Append("<th>IP</th>");
online.Append("</tr>");
bool f = false;
foreach (DictionaryEntry deChair in MemberOnlineList.memberList)
{
online.Append("<tr class=\"row" + ((f = !f) ? "0" : "1") + "\">");
online.Append("<td>" + ((MemberOnlineInfo)(deChair.Value)).userName + "</td>");
online.Append("<td>" + ((MemberOnlineInfo)(deChair.Value)).lastActive + "</td>");
online.Append("<td><a href=\"" + ((MemberOnlineInfo)(deChair.Value)).lastUrl + "\">" + ((MemberOnlineInfo)(deChair.Value)).lastUrl + "</a></td>");
online.Append("<td>" + ((MemberOnlineInfo)(deChair.Value)).IP + "</td>");
} online.Append("</table>");
}
我知道的办法有3种,1、MEMBER SHIP 2、静态 3、Application
但是我不知道MEMBER SHIP的工作原理,有知道的麻烦分享一下,或者其他好的解决方法