首 页   · 站长博客 · 用户注册 · 会员登陆  · 会员排行  ·最新主题  ·最近回复  精华区  版权声明  ·论坛管理
  当前登录身份:游客,请先登录。  笔名: 口令: 验证码:   
楼 主  index »  PHP安装/语法/函数 » [求助]请问如何防止一个用户名多人使用?  


  作者:caonibb
  注册时间:2004-07-17
  主题/回复:25/29
  积分:554
  等级:★★★(六级)
  称号:声名鹊起

  love23350369@163..
  174224060
  www.

 

 发表:2005-05-08 07:43:47 阅读 2510 次 回复 7 次 得分2  |   字号 字色
[求助]请问如何防止一个用户名多人使用?
老师您好:
    还是我上一个贴子的问题(session)我想知道如何防止一个用户名多人使用。也就是说,当我用aa这个用户登陆的时,这个时候换台机器,或者重新打开一个IE窗口(aa用户一直没有退出)再次用aa用户登陆,如何叫它不能登陆(也就是出现“您已经登陆”这样的提示语句)

也可以说成 当有人使用这个帐号的时候。其他人是无法使用的。请告诉我如何实现。因为我发现当我重新打开一个IE窗口做测试的时候session的值为空,也就是我上一个aa用户的session并没有传递到我这个新建的登陆页面中(在测试的时候aa 用户一直没有推出,并且也没有超过默认的24分钟生存周期)。
 
 1#楼  
 
  回复人:lather
  注册时间:2005-04-21
  主题/回复:37/63
  积分:1079
  等级:★★★☆(七级)
  称号:论坛贤士

   
 1#楼 发表于2005-05-08 09:36:28  评分:1 

你用了session_start();么?
把你的代码写上来。
 2#楼  
 
  回复人:caonibb
  注册时间:2004-07-17
  主题/回复:25/29
  积分:554
  等级:★★★(六级)
  称号:声名鹊起

   
 2#楼 发表于2005-05-08 22:04:41  评分:× 

我在php.ini文件中把session.auto.start=1 所以没有用session_start(); 以下是代码:(两个文件的 一个index.php一个login.htm)
————index.php------------------------------------------
<?php
 include "../inc/mysql.inc";
    // include "inc/myfunc.inc";
 $username=$_POST[username];
 $password=$_POST[password];
 //echo $username;
// echo $_SESSION[name];
 if (($username==$_SESSION[name]) and ($username!=""))
{echo "<br><center><span class=f14>您已经登陆,请不要重复登陆</span></center>";
 exit;}
 if ($username==""&&$password==""){
  header("location:login.htm");
     }else{
      $pw=md5($password);
     if ($username=="admin"){
    $aa=new mysql;
    $aa->link("qlgww");
    $query="select * from user where username='admin'";
    $result=$aa->excu($query);
    $mm=mysql_fetch_array($result,MYSQL_ASSOC);
    if ($pw==$mm["user_pw"]){
    $_SESSION[name]=$username;
   header("location:manger/index.php");
     //  include "manger/index.php";
    //header("location:manage_super/admin.php");
    }else{
       header("location:login.htm");
 // include "login.htm";
        }
     }else{
     //用户名不为root时
    $aa=new mysql;
    $aa->link("qlgww");
    $query="select * from user where username='$username'";
    $result=$aa->excu($query);
    if (mysql_num_rows($result)==0){
    header("location:login.htm");
    }else{
        $mm=mysql_fetch_array($result,MYSQL_ASSOC);
        if ($pw==$mm["user_pw"]){
       $_SESSION[name]=$username;
      // $query="select * from user where user_name=$username";
      // $rst=$aa->excu($query);
      // $kk=mysql_fetch_array($rst,MYSQL_ASSOC);
      // $_SESSION[userdw]=$kk["user_dw"];
    //include "manage_super/admin.php";
    header("location:manger/index.php");
    }else{
        header("location:login.htm");
        }
        }


     }
     }//判断同时为空

?>

-----------login.htm-------------------------------

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<style type="text/css">
<!--
.style1 {font-size: 14px}
-->
</style>
</head>

<body>
<div align="center">
  <br>
  <br>
  <br>
  <br>
  <br>
  <br>
  <table border="0" cellspacing="0" cellpadding="0">
    <tr>
  <td><form action="index.php" method=POST name="tijiao">
    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" width="240" height="126" bordercolorlight="#FFFFFF" bordercolordark="#FFFFFF" style="border-collapse: collapse">
  <tr>
    <td colspan="2" height="25" bgcolor="#A8A3AD">
      <p align="center"><b><font color="#FFFFFF">登陆管理</font></b></td>
  </tr>
  <tr>
    <td width="80" height="26" bgcolor="#E3E1E6">
      <p align="center" class="style1">账  号:</td>
    <td height="26" bgcolor="#E3E1E6" width="154">
      <input type="text" name="username" size="20" style="color: #A8A3AD; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1"></td>
  </tr>
  <tr>
    <td width="80" height="26" bgcolor="#E3E1E6">
      <p align="center" class="style1">口  令:</td>
    <td height="26" bgcolor="#E3E1E6" width="154">
      <input type="password" name="password" size="20" style="color: #A8A3AD; border-style: solid; border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1"></td>
  </tr>
  <tr>
    <td height="29" bgcolor="#E3E1E6" colspan="2">
      <p align="center">
    <input name="sub" type="submit" id="sub" value="登 陆">
  
    <input type="reset" value="取 消" name="cancel">
    </td>
  </tr>
  <tr>
    <td colspan="2" height="20" bgcolor="#A8A3AD"> </td>
  </tr>
    </table>
  </form></td>
    </tr>
  </table>
</div>
</body>
</html>
 3#楼  
 
  回复人:lather
  注册时间:2005-04-21
  主题/回复:37/63
  积分:1079
  等级:★★★☆(七级)
  称号:论坛贤士

   
 3#楼 发表于2005-05-08 22:28:41  评分: 

建议把login.htm换成php文件,比如login.php
然后这样处理:
--------------------
if(!session_is_registered("用户"))
include("login.inc");//login.inc是你上面html语言中form内容
else
echo "此用户的信息";
 4#楼  
 
  回复人:caonibb
  注册时间:2004-07-17
  主题/回复:25/29
  积分:554
  等级:★★★(六级)
  称号:声名鹊起

   
 4#楼 发表于2005-05-08 23:37:17  评分:× 

试了不管用 ~~~~~~~~~~
 5#楼  
 
  回复人:lather
  注册时间:2005-04-21
  主题/回复:37/63
  积分:1079
  等级:★★★☆(七级)
  称号:论坛贤士

   
 5#楼 发表于2005-05-09 00:39:16  评分: 

什么结果?总是运行include("login.inc")这句么?
 6#楼  
 
  回复人:lather
  注册时间:2005-04-21
  主题/回复:37/63
  积分:1079
  等级:★★★☆(七级)
  称号:论坛贤士

   
 6#楼 发表于2005-05-09 00:42:49  评分: 

if(empty($_SESSION[name]))
include("login.inc");//login.inc是你上面html语言中form内容
else
echo "此用户的信息"; 
--------------------------------
这样试试
 7#楼  
 
  回复人:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

   
 7#楼 发表于2005-05-09 16:20:26  评分:1 

每个新的登陆都会得到一个新的session
如果想避免重复登陆,可以在登陆的时候判断一下,如果此用户已经登陆,则拒绝登陆。
判断这个用户是否已经登陆了,可以采用多种方法:
方法一、每个用户登陆成功时都在数据库中记录一条信息。比如xxx在某时间登陆了。这样,当其他用户登陆时,先查询数据库,看看这个用户是否已经登陆。。这样做的缺点是:如果一个用户在退出的时候没有通过正常途径,比如直接关机,这样的话数据库中登陆信息没有删除,这样的话他就永远无法登陆了,除非手工清除数据库中的记录。
方法二、遍历session.
 PHP中提供了遍历session的方法(具体我不记得了,可以查资料),只需要在用户登陆的时候遍历一下session,看看该用户是否已经登陆(如果已经登陆,服务器session中有他的信息)。

第二种方法应该还是较为可行的。
  页数1/1首页 « 1 » 末页
  发表回复:您还没有登陆,无法发表回复。请先[登陆]

一起PHP技术联盟 主办:一起PHP 联系方式:站长QQ:4304410 QQ群:8423742 20159565 站长博客 E-mail: nqp@nqp.me 执行时间:0.014sec
SimsmaBBS 2008 (v6.0) Developed by 17php.com,Copyright(C)2003-2010 All rights reserved. 副本授权:一起PHP官方专用版