目前我用该方法 实现获得连接客户端的ip 并把他存到数据库里 right(user(),length(user())-instr(user(),'@')) 该语句获得ip。在退出时,再删除该记录,是否有其他 的方法,因为我现在是在退出客户端程序的时候实现 删除记录,但是客户端退出有时间限制3秒内一定要推出,否则强制退出,所以经常出现不能删除上次访问ip的情况。求其他的解决方案。
说明:
但是客户端退出有时间限制3秒内一定要推出,否则强制退出,所以经常出现不能删除上次访问ip的情况以上情况不可改变,并且删除记录一定要写在退出时要执行的方法里面,所以不考虑改变这些情况

解决方案 »

  1.   

    mysql 的权限管理中,本身就可以限制用户有连接数。In MySQL 5.1, you can limit the following server resources for individual accounts: 
     - The number of queries that an account can issue per hour 
     - The number of updates that an account can issue per hour 
     - The number of times an account can connect to the server per hour 
     - The number of simultaneous connections to the server an account can have mysql> CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank';
    mysql> GRANT ALL ON customer.* TO 'francis'@'localhost'
        ->     WITH MAX_QUERIES_PER_HOUR 20
        ->          MAX_UPDATES_PER_HOUR 10
        ->          MAX_CONNECTIONS_PER_HOUR 5
        ->          MAX_USER_CONNECTIONS 2;MAX_USER_CONNECTIONS MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  2.   

    我的问题是这样
    其实是很多客户端用同一个数据库用户连接,
    然后用数据里的某个表的用户名和密码来标记这个客户,所以是要检测这个用户的单ip连接控制,不是数据库用户的单ip连接控制
      

  3.   


    明白了。这个很难准确实现,特别是用户异常下线的时间,它的客户端程序根本来不及执行这个 delete 动作。前一段有个贴子,类似的功能。他的实现方法是客户端程序 定时(每20s)向服务器发送一个 insert ... on duplicate update 来更新 表中对应的 的记录
    比如
    userA , 127.0.0.1, 2009-11-01 19:23:59这样通过查询 select * from loginuser where logUpdateTime>now()-interval 20 second 
    就可以知道再线的用户了。