<?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实现单个用户禁止重复登录,防止同一用户同时登陆的更多相关文章

  1. asp.net mvc 权限过滤和单点登录(禁止重复登录)

    1.权限控制使用controller和 action来实现,权限方式有很多种,最近开发项目使用控制控制器方式实现代码如下 /// <summary> /// 用户权限控制 /// < ...

  2. 给360的六条建议(禁止异地登录,普通用户500G足够用了)

    个人觉得,360云盘哪怕做个小改进,都不至于走到现在的地步,最后六条建议! 1.弄个实名制,身份证和手机号码双重绑定,每人限制申请一个账户. 2.禁止云盘的一切分享功能,采用封闭式,个人云盘资料其他人 ...

  3. ASP.net 实现禁止用户重复登录

    本文先为大家介绍如何利用缓存Cache方便地实现此功能. Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户:而Session是 ...

  4. java web项目防止多用户重复登录解决方案

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任.作者:永恒の_☆    地址:http://blog.csdn.net/chenghui031 ...

  5. linux系统禁止root用户通过ssh登录及ssh的访问控制

    Linux系统默认情况下,是可以通过ssh以root权限登录的.但出于安全考虑,这样的权限是不合适的,因为黑客可能通过暴力破解你的root密码,然后进入你的系统,oh,damn it..... 同样是 ...

  6. Application作用域实现:当用户重复登录时,挤掉原来的用户

    Application作用域实现:当用户重复登录时,挤掉原来的用户 一.实现思想 1.application(ServletContext)是保存在服务器端的作用域,我们在application中保存 ...

  7. Centos 用户登录失败N次后锁定用户禁止登陆

    针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁 Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁 ...

  8. Centos7下用户登录失败N次后锁定用户禁止登陆的方法

    前言 针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁.Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值 ...

  9. Struts2 token禁止重复提交表单

    如果服务器响应慢的情况下,用户会重复提交多个表单,这时候有两种设计思想: 1.在客户端使用JS技术,禁止客户重复提交表单.但是这样会使一些不使用浏览器方式登陆的人比如使用底层通信来攻击你的服务器 2. ...

随机推荐

  1. jQuery下操作dropdownlist

    dropdownlist呈现到html中如下: <select id="ddlOrg" name="ddlOrg">     <option ...

  2. HDU5853 Jong Hyok and String(二分 + 后缀数组)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5853 Description Jong Hyok loves strings. One da ...

  3. POJ1815 Friendship(字典序最小最小割割边集)

    看了题解.当时也觉得用邻接矩阵挺好写的,直接memset:然而邻接矩阵不懂得改,于是就放开那个模板,写了Dinic.. 方法是,按字典序枚举每一条满流的边,然后令其容量减1,如果最大流改变了,这条边就 ...

  4. java实现文件上传--flash上传

    1.http请求的头信息是“application/octet-stream”,request body 是二进制的flash图片流 2.把流中的信息读入到文件中 代码如下,代码分三个部分: ---- ...

  5. javascript 函数及作用域总结介绍

    在js中使用函数注意三点: 1.函数被调用时,它是运行在他被声明时的语法环境中的: 2.函数自己无法运行,它总是被对象调用的,函数运行时,函数体内的this指针指向调用该函数的对象,如果调用函数时没有 ...

  6. tornado 学习笔记4 异步以及非阻塞的I/O

    Read-time(实时)的网站需要针对每个用户保持长时间的连接.在传统的同步网站服务中,通常针对每个用户开启来一个线程来实现,但是这样做非常昂贵. 为了使并发连接的成本最小化,Tornada使用单个 ...

  7. ASP.NET状态保持方案若干

    客户端方案: 1.ViewState 2.隐藏域 3.cookie 大小4KB限制,不消耗服务器资源,可配置到期时间,但安全性不高,还被客户端禁用. 4.QueryString 方法简单,但不安全,有 ...

  8. IOS 蓝牙相关-app作为外设被连接的实现(3)

    再上一节说了app作为central连接peripheral的情况,这一节介绍如何使用app发布一个peripheral,给其他的central连接 还是这张图,central模式用的都是左边的类,而 ...

  9. IE6及以上版本fixed问题解决方案,页面右下角固定页面,可以最大化、最小化、正规显示

    在窗口固定位置显示内容使用fixed,但是 IE 6 不支持,后来我搜了很多方法,都没有作用,后来类比着一个网站的代码,使用absolute .z-index解决了问题. 页面div结构: <d ...

  10. iosiPhone屏幕尺寸、分辨率及适配

    iosiPhone屏幕尺寸.分辨率及适配     1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Fac ...