php实现单个用户禁止重复登录,防止同一用户同时登陆
<?php
session_start();
//ini_set('session.auto_start', 0); //关闭session自动启动
//ini_set('session.cookie_lifetime', 0);//设置session在浏览器关闭时失效
//ini_set('session.gc_maxlifetime', 3600); //session在浏览器未关闭时的持续存活时间 //防止同一用户的重复登录
$server = '127.0.0.1';
$username = 'root';
$password = '';
$conn = mysql_connect($server, $username, $password);
$e = mysql_select_db('test',$conn);
mysql_query("SET NAMES UTF8"); //访问url,http://www.test.com/single_login.php?name=zx&pwd=zx header("Content-type:text/html;charset=utf-8"); $username =$_GET['name']; $password =$_GET['pwd']; //$ipdress = $_SERVER['REMOTE_ADDR'];
//
//$login_time = time();//登陆时间更新
//
//$session_id = session_id();
//
//$_SESSION['name']=$_GET['name']; //var_dump($session_id); //$sql = "INSERT INTO tongji VALUES ('NULL','$data_id','$time','$ipdress','$session_id')"; //$result =mysql_query($sql); $sql = "select * from slogin where username = '$username' and password = '$password'";
//var_dump($sql);
$result =mysql_query($sql);
$s = mysql_fetch_array($result); //权限验证的时候一定要判断数据库写入session_id是不是和$_session里面的session_id是不是一致,如果不一致就退出,这个防止同一个账户被多个人同时登陆的实现方法就是基于这个session_id
//一定要设置session的存活时间,和session关掉页面就session消除
//如果有其他人登陆的时候,会写入新的session_id,这样旧的用户就会被权限验证不通过,但是不能做到实时效果,这样就挤掉了旧用户,这里有个缺陷,就是每次验证权限的时候就需要查询数据库,如果可以吧这个数据放在redis就比较好
//其实其他的验证方法,也类似使用这种方法,有个验证的凭证,只不过这种方法需要查询数据库,但是放在redis之后就比较好
//或者统一管理session的时候,比如放在数据库就更好了,记住吧session_id也存入数据库,或者放在memcash,redis就比较方便,比如在redis进行管理的时候,就可以直接更新掉存在session_id
if($s){
// var_dump($s);
// echo '<br>';
// echo session_id();
if($s['session_id'] === session_id()){
//unset($s['session_id']);
} else {
$ipdress = $_SERVER['REMOTE_ADDR'];
$login_time = time();
$session_id = session_id();//重新赋予一个session_id
$sql = "update slogin set ip = '$ipdress',login_time= '$login_time',session_id = '$session_id'";
$result1 =mysql_query($sql);
// $ss = mysql_fetch_array($result);
if($result1){
echo 'OK'; } else {
echo 'F';
}
} }else { echo 'FFFFFFFFFFFFFFFFFFFFFFF'; }
数据库结构
1 id int(11) AUTO_INCREMENT
2 username varchar(20) utf8_general_ci
3 password varchar(20) utf8_general_ci
4 ip varchar(20) utf8_general_ci
5 session_id varchar(100) utf8_general_ci
6 login_time int(20)
7 regist_time int(20)
php实现单个用户禁止重复登录,防止同一用户同时登陆的更多相关文章
- asp.net mvc 权限过滤和单点登录(禁止重复登录)
1.权限控制使用controller和 action来实现,权限方式有很多种,最近开发项目使用控制控制器方式实现代码如下 /// <summary> /// 用户权限控制 /// < ...
- 给360的六条建议(禁止异地登录,普通用户500G足够用了)
个人觉得,360云盘哪怕做个小改进,都不至于走到现在的地步,最后六条建议! 1.弄个实名制,身份证和手机号码双重绑定,每人限制申请一个账户. 2.禁止云盘的一切分享功能,采用封闭式,个人云盘资料其他人 ...
- ASP.net 实现禁止用户重复登录
本文先为大家介绍如何利用缓存Cache方便地实现此功能. Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户:而Session是 ...
- java web项目防止多用户重复登录解决方案
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任.作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui031 ...
- linux系统禁止root用户通过ssh登录及ssh的访问控制
Linux系统默认情况下,是可以通过ssh以root权限登录的.但出于安全考虑,这样的权限是不合适的,因为黑客可能通过暴力破解你的root密码,然后进入你的系统,oh,damn it..... 同样是 ...
- Application作用域实现:当用户重复登录时,挤掉原来的用户
Application作用域实现:当用户重复登录时,挤掉原来的用户 一.实现思想 1.application(ServletContext)是保存在服务器端的作用域,我们在application中保存 ...
- Centos 用户登录失败N次后锁定用户禁止登陆
针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁 Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁 ...
- Centos7下用户登录失败N次后锁定用户禁止登陆的方法
前言 针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁.Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值 ...
- Struts2 token禁止重复提交表单
如果服务器响应慢的情况下,用户会重复提交多个表单,这时候有两种设计思想: 1.在客户端使用JS技术,禁止客户重复提交表单.但是这样会使一些不使用浏览器方式登陆的人比如使用底层通信来攻击你的服务器 2. ...
随机推荐
- express-5 质量保证(2)
跨页测试 跨页测试更有挑战性,因为需要你控制和观测浏览器. 现在设置一个跨页测试情境的例子.比如,你的网站上有一个包含联系表单的Request Group Rate页面.营销部门想知道客户是从哪个页面 ...
- JS操作select下拉框动态变动(创建/删除/获取)
1.动态创建select function createSelect(){ var mySelect = document.createElement_x("select"); m ...
- Redis执行Lua脚本示例
Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行.使用脚本的好处如下: 1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在red ...
- Shell 编程基础之基本语法结构汇总
一.条件语句 简单条件 if [ condition ]; then # 当 condition 成立时,执行内容: fi # 将 if 反过来写,fi 结束 if 之意 复杂条件 if [ cond ...
- BZOJ4684 : Company Organization
二分答案,转化为判定问题. 建立有向图,$a->b$连边表示$a$是$b$的子集,至此可以处理掉$1$和$2$. 对于$5$,则往对应点的集合塞一个元素,即可满足$5$. 首先求出强连通分量进行 ...
- HDU 3333 & 主席树
题意: balabala SOL: 这题用主席树怎么做呢...貌似一模一样...一个一个建n棵的线段树.先把上一棵树复制下来,当a[i]出现过,就把这棵树里的那个位置去掉------一模一样的思维.. ...
- BZOJ3226[Sdoi2008]校门外的区间 题解
题目大意: 有5种运算维护集合S(S初始为空)并最终输出S. 5种运算如下: U T S∪T I T S∩T D T S-T C T T-S S T S⊕T 基本集合运算如下: A∪B {x : ...
- ACM 喷水装置(一)
喷水装置(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...
- [Cocos2D-x For WP8]Tile Map创建地图
在Cocos2D-x里面创建Tile Map地图是需要用到.tmx的地图文件的,那么创建Tile Map地图文件,我们可以通过地图编辑器来创建,地图编辑器可以在网站:http://www.mapedi ...
- Vijos1448校门外的树 题解
Vijos1448校门外的树 题解 描述: 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现 ...