用GUID,当用户登录就分配一个GUID与数据库的交互都用到这个GUID
解决方案 »
- gridview排序,在vs中调试运行是正常的,但放到网站上后,经跟踪程序执行了排序代码,但gridview的显示内容去没变化!但在VS中调试时一点问题都没
- 各位老大这里看!新鲜问题这里帮忙!来就给分!
- 怎样利用下拉菜单,在数据库中插入数据?高手指教
- B/s结构下TreeView的问题
- 后台调用前台的javascript函数不成功
- 文章标题后面显示NEW或HOT等图片,怎么做?简单问题,解决马上给分~
- 请问如何把自己写的类加入到system.web程序集?
- 页面内容传递到后台
- DataGrid 的获取FooterTemplate 中的值的问题
- vs.net的安装问题
- JavaScript在使用showModalDialog的问题,急!!!!!!
- 先到此报到一下!(顺便要一个显示数据表内容的例子.net的)献上20分以表谢意!
在登陆的时候作检测此人
用session可以解决
using System.Collections;
using System.ComponentModel;
using System.Data.SqlClient;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace office.Online
{
public struct User
{
public string username;
public DateTime lasttime;
public DateTime curtime;
}
/// <summary>
/// online 的摘要说明。
/// </summary>
public class online
{
private static DataTable _alluser;
const int DELAY_TIMES = 10000 ; //定义执行的时间间隔为5秒
const int DELAY_SECONDS=40; //将用户掉线时间设置为40秒
private Thread thread ; //定义内部线程
private static bool _flag=false; //定义唯一标志 public online()
{
//
// TODO: 在此处添加构造函数逻辑
//
if(_alluser==null)
{
//define user list
// Declare variables for DataColumn and DataRow objects.
_alluser = new DataTable("onlineuser"); DataColumn myDataColumn;
// Create new DataColumn, set DataType, ColumnName and add to DataTable.
// Create username column.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.String");
myDataColumn.ColumnName = "username";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "username";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = true;
_alluser.Columns.Add(myDataColumn); // Create lasttime column.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.DateTime");
myDataColumn.ColumnName = "lasttime";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "lasttime";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = false;
_alluser.Columns.Add(myDataColumn); // Create curtime column.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.DateTime");
myDataColumn.ColumnName = "curtime";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "curtime";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = false;
_alluser.Columns.Add(myDataColumn); }
}
//功能说明:将当前用户加入在线列表
public bool AddUserToOnLine(User user)
{
string strExpr;
strExpr = "username='" + user.username + "'";
DataRow[] curUser;
curUser = _alluser.Select(strExpr); if (curUser.Length >0 )
{
for(int i = 0; i < curUser.Length; i ++)
{
curUser[i]["curtime"]=DateTime.Now;
}
}
else
{
DataRow myRow;
myRow = _alluser.NewRow();
// Then add the new row to the collection.
myRow["username"] = user.username;
myRow["lasttime"] = user.lasttime;
myRow["curtime"] = DateTime.Now;
_alluser.Rows.Add(myRow);
}
_alluser.AcceptChanges();
return true;
}
//功能说明:判断某用户是否在线
//返回值:TRUE代表在线,FALSE不在
public Boolean IsUserOnLine(string username)
{
if(_alluser==null)
{
return (false);
}
else
{
string strExpr;
strExpr = "username ='" + username + "'";
DataRow[] curUser;
// Use the Select method to find all rows matching the filter.
curUser = _alluser.Select(strExpr); if (curUser.Length >0 )
{
return true;
}
else
{
return false;
}
}
} //功能说明:更新用户在线时间 public Boolean CheckUserOnLine(string username)
{ //需要先判断用户是否已经在用户列表中了
if(_alluser!=null)
{
User newuser=new User();
newuser.username= username;
newuser.lasttime=newuser.curtime=DateTime.Now;
AddUserToOnLine(newuser);
}
return true;
}
//功能说明:统计在线用户数目
public int NumUserOnLine()
{
if(_alluser!=null)
{
string strExpr;
strExpr = "username>''";
DataRow[] curUser;
// Use the Select method to find all rows matching the filter.
curUser = _alluser.Select(strExpr);
return curUser.Length;
}
return 0;
}
//功能说明:删除在线用户
public void DelUserOnLine(string username)
{
if(_alluser!=null)
{
string strExpr;
strExpr = "username ='" + username + "'";
DataRow[] curUser;
// Use the Select method to find all rows matching the filter.
curUser = _alluser.Select(strExpr);
if (curUser.Length >0 )
{
//删除这些记录
for(int i = 0; i < curUser.Length; i ++)
{
curUser[i].Delete();
}
_alluser.AcceptChanges();
}
}
}
//启动守护线程
public void CheckOnline()
{
if (!_flag)
{
_flag= true;
this.thread = new Thread(new ThreadStart(ThreadProc)) ;
thread.Name = "online user" ;
thread.Start() ;
}
}
internal void ThreadProc()
{
while(true)
{
//我是将该用户的最新时间加上30秒,然后和当前时间比较,小与当前时间,
//则表示该用户已经吊线,则删除他的记录
//开始检查是否有用户过期了
string strExpr;
strExpr = "curtime < '" + DateTime.Now.AddSeconds( 0 - DELAY_SECONDS) + "'";
DataRow[] curUser;
// Use the Select method to find all rows matching the filter.
curUser = _alluser.Select(strExpr); if (curUser.Length >0 )
{
//删除这些记录
for(int i = 0; i < curUser.Length; i ++)
{
curUser[i].Delete();
}
_alluser.AcceptChanges();
}
Thread.Sleep(DELAY_TIMES) ;
}
}
}
}
if(Application["YesOrNo"]==null)
{
Application.add("YesOrNo")=1;
}
else
{
Application.add("YesOrNo")=0;
}
在使用时判断Application("YesOrNo")是否为1,是则有人,为0.......
首先删除过期用户,然后查询是否在线
delete from Forum_Online where Datediff(minute,Forum_Online_Now,getdate())>10 //十分钟没有反映登陆的时候向数据库添加这个人的信息,
在表中有一个字段来存储这个用户的登录ID(或者是随机流水号),在系统中任何一个地方都要判断此ID(或随机流水号)是否存在,以判断此用户会话是否有效.
用户登录一次就要更改一次该随机流水号.
页面超时,或关闭窗口时提交SESSION表示用户离开。
复位用户状态标识。
呵呵~~~~
只允许一个人在线么
每次登录时,把登录时间写道数据库里面
每个页面检查 登录时间,如果不符,说明其他人使用这个账号
每个页面检查 数据库与session
如果不相符,说明 自己掉线,或者别人使用这个账号
呵呵