php原生检测用户,php代码在线测试_php检测用户在线状态的实例代码
摘要 騰興網(wǎng)為您分享:php檢測用戶在線狀態(tài)的實(shí)例代碼,中國體育,掌上優(yōu)云,盈益云,想看視頻等軟件知識,以及藍(lán)色警戒,魔獸世界自動拾取,在線視頻工具,泥石流圖片,四年級暑假作業(yè)答案下冊,葫蘆娃頭像,rmprepusb,電腦ocr軟件,聚寶盆app,神話時(shí)代擴(kuò)展版,保時(shí)捷中國,u8,南國書香節(jié),macos壁紙,傷感文字壁紙等軟件it資訊,歡迎關(guān)注騰興網(wǎng)。以下代碼ThinkPHP框架,實(shí)現(xiàn)檢測用戶的在線狀態(tài)。 1.先新建一個tags.php文件,放在配置目錄Conf下。 ?php /* * 添加行為 * */ return array('action_begin' = array('OnlineCheck'), ); ? 2.定義具體的功能 ?p...
以下代碼ThinkPHP框架,實(shí)現(xiàn)檢測用戶的在線狀態(tài)。
1.先新建一個tags.php文件,放在配置目錄Conf下。
<?php /* * 添加行為 * */ return array('action_begin' => array('OnlineCheck'), ); ?>2.定義具體的功能
<?php /* * 定義行為: 在線更新 */ class OnlineCheckBehavior extends Behavior {//行為參數(shù)protected $options = array('ONLINE_CHECK' => true, // 默認(rèn)進(jìn)行在線'ONLINE_CHECK_TIME' => 10, // 默認(rèn)5分鐘未活動,說明已下線);public function run(&$params) {if (C('ONLINE_CHECK')) {// 更新sessionif ((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)) { // 不存在在線記錄,則清空sessionsession(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);}}}} } ?>
3,在具體登錄的地方添加如下代碼:
// 登錄檢測public function checkLogin() {// $this->redirect($url);$username = strtolower($this->_param('usr'));$pwd = $this->_param('pwd');$url = $this->_param('url'); // 目標(biāo)地址$is_error = false;if (empty($username) or empty($pwd)) {$this->assign('error_msg', '用戶名和口令不能為空');$is_error = true;}if (!$is_error) {$model = M('Usr');$map['account'] = $username;$map['upwd'] = strtoupper(md5($pwd));$icount = $model->where($map)->count();if ($icount == 1) {$list = $model->where($map)->find();// 檢測用戶是否在線if ($this->isOnline($list['id'])) {// if ($list['status']) {session('login_account', $username);session('login_nickname', $list['nickname']);session('last_time', toDate($list['last_time']));if ($list['last_ip']) {session('last_ip', long2ip($list['last_ip']));} else {session('last_ip', get_client_ip());}session('login_count', $list['login_count']);session('login_uid', $list['id']);session('login_pwd', $list['upwd']);session('access_time', time());//用戶最后點(diǎn)擊頁面時(shí)間session超時(shí)使用///$map['id'] = $list['id'];$data['last_time'] = time();$data['last_ip'] = ip2long(get_client_ip());$model->where($map)->save($data);$model->where($map)->setInc('login_count', 1);// 檢測是否有同一IP的記錄,有更新,否則 添加$online = M('Online');$map = array();$map['lastip'] = ip2long(get_client_ip());$online_id = $online->where($map)->getField('id');if (empty($online_id)) {// 插入在線用戶表$data = array();$data['uid'] = $list['id'];$data['account'] = $list['account'];$data['nickname'] = $list['nickname'];$data['lasttime'] = time();$data['lastip'] = ip2long(get_client_ip());$online->add($data);}else{ // 更新在線用戶表$data = array();$data['uid'] = $list['id'];$data['account'] = $list['account'];$data['nickname'] = $list['nickname'];$data['lasttime'] = time();//$data['lastip'] = ip2long(get_client_ip());$online->where($map)->save($data);}} else {$is_error = true;$this->assign('error_msg', '此用戶已被禁止登錄!');}// if 結(jié)束} else {$is_error = true;$this->assign('error_msg', '此用戶名已在其他電腦登陸,請' . C('ONLINE_CHECK_TIME') .'分鐘后再試!');}} else {$is_error = true;$this->assign('error_msg', '錯誤的用戶名或口令!');}}if ($is_error) {$this->display('login');} else {$this->redirect('Index/index'); //if (empty($url)) { //$this->redirect('Index/index'); //} else { //$this->redirect($url); //}}}/** * 檢測用戶是否在線 * @access private * @param int $uid 用戶ID * @return Boolean true=不在線 */private function isOnline($uid) {$ip = ip2long(get_client_ip());$online = M('Online');$map['uid'] = array('eq', $uid);$list = $online->where($map)->find();if (empty($list)) { // 不存在return true;} else { // 存在,檢測IP是否一致,否則,檢測是否超過5分鐘if ($list['lastip'] == $ip) {return true;} else {if ($list['lasttime'] < time() - C('ONLINE_CHECK_TIME') * 60) {return true;} else {return false;}}}}
以上就是PHP在線狀態(tài)檢測的代碼,同一時(shí)間只有一個用戶可以存在。
暫時(shí)沒有考慮到非正常掉線等,cookie,session意外的處理。
相關(guān)推薦
總結(jié)
以上是生活随笔為你收集整理的php原生检测用户,php代码在线测试_php检测用户在线状态的实例代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sklearn中多种编码方式——cate
- 下一篇: 1901~2100年节气表