程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP實現用戶在線狀態檢測

PHP實現用戶在線狀態檢測

編輯:PHP綜合

在寫注冊登錄的時候,經常有需要檢測用戶狀態.今天就專門研究了一下。還可以吧~不過應該還是有一些小的漏洞,先分享給大家,慢慢改進

這個是基於ThinkPHP框架的,其他的可以自己根據需求改

1.先新建一個tags.php文件,放在配置目錄Conf下。

<?php
 /*
 * 添加行為
 *
 */
 return array(
    'action_begin' => array('OnlineCheck'),
 );
 ?>

2.定義具體的功能

<?php
 /*
 * 定義行為: 在線更新
 */
 class OnlineCheckBehavior extends Behavior {
    //行為參數
    protected $options = array(
        'ONLINE_CHECK' => true, // 默認進行在線
        'ONLINE_CHECK_TIME' => 10, // 默認5分鐘未活動,說明已下線
    );
    public function run(&$params) {
        if (C('ONLINE_CHECK')) {
            // 更新session
            if ((session('?login_account')) && (time() - session('access_time') > 60)) {
                session('access_time', time());
            }
            // 在線更新
            $ip = ip2long(get_client_ip());
            $online = M('Online');
            // 先刪除在線表中 超過5分鐘未活動的記錄
            //$sql = ' delete from __TABLE__  where  ';
            $map['lasttime'] = array('lt', time() - C('ONLINE_CHECK_TIME') * 60);
            $icount = $online->where($map)->delete();
            if (session('?login_account')) { // 如果是登錄用戶
                $map = array();
                $map['uid'] = session('login_uid');
                $map['lastip'] = $ip;
                $id = $online->where($map)->getField('id');
                if (empty($id)) { // 不存在在線記錄,則清空session
                    session(null);
                } else {
                    $map = array();
                    $map['id'] = array('eq', $id);
                    $data['lasttime'] = time();
                    $data['lastip'] = $ip;
                    $online->where($map)->save($data);
                }
            } else { // 不是登錄用戶  游客
                unset($map);
                $map['lastip'] = array('eq', $ip);
                $id = $online->where($map)->getField('id');
                //dump($id);
                if (empty($id)) { // 不存在在線記錄, 則添加
                    $data = array();
                    $data['uid'] = 0;
                    $data['account'] = 'Guest';
                    $data['nickname'] = '游客';
                    $data['lasttime'] = time();
                    $data['lastip'] = $ip;
                    $online->add($data);
                } else {
                    $map = array();
                    $map['id'] = array('eq', $id);
                    $data['lasttime'] = time();
                    $data['lastip'] = $ip;
                    $online->where($map)->save($data);
                }
            }
        }
    }
 }
 ?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved