php 实现同一个账号同时只能一个人登录
php 实现同一个账号同时只能一个人登录
以前考虑过这个问题,今天实现了一下,挺快的,从研究到开发完成差不多4个小时。有点类似QQ,二台电脑登录,一台会把另一台挤掉线,并提示其他地点登录信息。
一,实现原理
1,用户在电脑A登录,session信息存放在redis当中,并将session_id存到mysql数据库中。
2,同一用户在电脑B登录,验证完用户名和密码后,将该用户信息从数据库读出,取得用户在电脑A登录的session_id,然后在到redis中验证session是否过期。
3,如果过期,不用openfire推送提示信息。如果没有过期,php利用openfire推送消息后,在将redis中用户在电脑A中登录的session删除掉,删除后,在将用户在电脑B登录的个人信息放到session中,并将电脑B登录的session_id更新到数据库中,在这里一定要先发送推送,然后在清空session,不然用户在电脑A收不到xmpp发过来的消息。
注意:
openfire是java cms的一种,自身有数据库,您创建的用户表根openfire自带的用户表之间要建立某种联系(如:手机号,邮箱等),方便信息推送。
同一session_id肯定是在相同媒介上登录的,这个时候,也不用更新数据库和推送消息
下面简单说一下安装过程,以及要注意的地方。
二,安装所用到的工具
- # yum install php php-fpm nginx mysql mysql-server redis php-redis php-devel php-pdo php-mysql
修改session存储方式:
- # vim /etc/php-fpm.d/www.conf
- ;php_value[session.save_handler] = files //注释掉旧的
- ;php_value[session.save_path] = /var/lib/php/session
- php_value[session.save_handler] = redis //添加以下内容
- php_value[session.save_path] = "tcp://127.0.0.1:6379"
启动服务后,如果以下内容说明,session存redis成功了
redis telnet查看session
openfire下载地址:http://www.igniterealtime.org/downloads/
- # rpm -ivh ./*.rpm //下载的是rpm安装包
openfire启动后,然后访问http://ip:9090,一步一步配置就成了,有一点要注意就是数据库的编码。
关于redis的php操作和命令行操作,请参考:
php 实现同一个账号同时只能一个人登录的更多相关文章
- Asp.net 实现只能允许一个账号同时只能在一个地方登录
先上帮助类: /// <summary> /// 单点登录帮助类 /// </summary> public class SSOHelper { /// <summary ...
- spring security 管理会话 多个用户不可以使用同一个账号登录系统
多个用户不能使用同一个账号同时登陆系统. 1. 添加监听器 在web.xml中添加一个监听器,这个监听器会在session创建和销毁的时候通知Spring Security. <listener ...
- java保持同一时间同一账号只能在一处登录
//登录页面 login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&qu ...
- 在windows server里,对于同一个账号,禁止或允许多个用户使用该账户,同时登录
开始 -> 运行 -> gpedit.msc -> 本地计算机 策略 -> 计算机配置 -> 管理模板 -> Windows 组件 -> 远程桌面服务 -&g ...
- web应用中实现同一个账号,后面登录的会把前面登录的挤下线
在web应用中假如没有做会话控制,会出现这样的情况,A登录了账号,B也登录了账号,都是同样的账号,A修改了信息,B会看到修改的信息,这样的用户体验不好,B会觉得我没有修改啊,为什么信息会改变.而做会话 ...
- ubuntu12.04管理员账户登录不了桌面,只能客人会话登录
ubuntu12.04管理员账户登录不了桌面,只能客人会话登录 求助!!ubuntu12.04管理员账户登录不了桌面,只能客人会话登录. 登录管理员账户时,输入密码后,一直在登录界面循环 费了好大劲啊 ...
- loadRunner之参数化,对用户名和密码进行参数化,并打印输出---实际操作:用户登录的账号用随机值来登录
录制脚本,对用户名和密码进行参数化: Action() { web_url("WebTours", "URL=http://127.0.0.1:1080/WebTours ...
- Debian9.5解决在root用户下启用VNC后lightdm+Xfce4只能使用root登录,其他用户无法登陆
Debian9.5解决在root用户下启用VNC后lightdm+Xfce4只能使用root登录,其他用户无法登陆 最近在研究debian9.5 VNC的问题,当VNC使用tightVNC或tiger ...
- 限制客户端同账号同IP多终端登录
打开SoftEther VPN Server Manager工具,连接上节点 1.管理虚拟HUB--管理用户--双击用户--安全策略--最大多重登录数设置为1 2.管理虚拟HUB--虚拟HUB属性-- ...
随机推荐
- python 安装 ez_setup.py出现的问题及解决办法
试了网上好几个解决办法. 下面这个办法是最对我胃口的. ~~~~~~~~~~~~~~~~ 安装ez_setup.py时出现了这个问题: UnicodeDecodeError: 'ascii' cod ...
- HDU 3516 Tree Construction (四边形不等式)
题意:给定一些点(xi,yi)(xj,yj)满足:i<j,xi<xj,yi>yj.用下面的连起来,使得所有边的长度最小? 思路:考虑用区间表示,f[i][j]表示将i到j的点连起来的 ...
- curl 网页抓取
如果要把这个网页保存下来,可以使用-o参数,这就相当于使用wget命令了. curl -o [文件名] www.tvbs.cc 二.自动跳转 有的网址是自动跳转的.使用-L参数,curl就会跳转到新的 ...
- 【转】Linux下Android ADB驱动安装详解
原文网址:http://blog.csdn.net/zhenwenxian/article/details/5901350 Linux下Android ADB驱动安装详解 概述 最近由于内置的合作商比 ...
- Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建与调试
Eclipse+CDT+YAGARTO+J-Li:开源开发环境搭建与调试:作者:Chongqing:邮箱:ycq.no1@163.com:文档版本:V1.0:发布日期:2014-08-04:前言:此文 ...
- mysqli connect database and print
<?php $connect = mysqli_connect('localhost','root','','intertrading') or die('Unale to connect'); ...
- JS--回到顶部代码
原文地址:http://www.cnblogs.com/liguiqiang1986/articles/3132023.html JS--回到顶部代码 <!DOCTYPE html PUBLIC ...
- C++按值和按址传递对象的思考和优化
C++是一门面向对象(OOP)编程语言,在这门语言中也有函数,函数的参数可以是变量数值,当然也可以是对象.所以,传统地就有关于对象是按值传递还是按址传递的讨论. 在C语言中,按值传递在很多情况下可以出 ...
- Hive 9、Hive 在表中添加正则匹配
在Hive中还有一项比较好用的功能,也是非常重要的功能:在建表的时候可以不指定表的行.字段.列的分隔方式,通过给表指定一段正则表达式,让Hive自动去匹配: 1.创建表 CREATE TABLE ap ...
- XHTML使用规范
XHTML元素语法: 1.XHTML元素必须正确嵌套 2.XHTML元素必须始终闭合 3.XHTML元素必须小写 4.XHTML文档必须有一个更元素 XHTML属性语法规则: 1 ...