只允许一个用户访问同一台计算机上的帐户

时间:2013-07-26 06:45:39

标签: php html postgresql

我的登录系统存在此问题。 我有两个用户,userA和userB在同一台计算机上。 userA在一个浏览器中输入他的帐户; userB可以在同一浏览器中访问其帐户。我的系统认为现在userB也是userA,userA仍然连接到自己的帐户,但他的名字显示为userB。如果这两个用户可以访问不同的浏览器,则没有问题。

您有什么想法我该如何解决这个问题? 这是我的登录系统的代码:

<?php session_start();

 $error = "";
 $usuario1="";
 $password="";
 $form = $_POST['acceso_cuenta'];

 if($_SERVER['REQUEST_METHOD']=='POST'){

    $usuario1  = $_POST['login'];
    $password1 = $_POST['pass'];

        $strconn="dbname=postgres port=5432 host=127.0.0.1 user=xxx password=***";
        $conn=pg_Connect($strconn);

if(!$conn){
 //  "Error connection!!!";  

}else{

  $query3 = "SELECT USUARIO FROM USERS WHERE USUARIO='$usuario1' 
      AND E_CONTRASENIA='$password' AND LEVEL='TAMER_LEVEL_3'";

  $query2 = "SELECT USUARIO FROM USERS WHERE USUARIO='$usuario1' 
      AND E_CONTRASENIA='$password' AND LEVEL='TAMER_LEVEL_2'";

      $result2=pg_query($conn,$query2);

      $result3=pg_query($conn,$query3);

         if(pg_num_rows($result3) != 0 ) { //success
             if(isset($_SESSION['logged-in']) || isset($_SESSION['user'])){
                   session_unset();
                   session_destroy();
                   }

             $_SESSION['logged-in'] = true;
             $_SESSION['user']=$usuario1;
             header('location: http://localhost/public_html/teacherLv3.php');   
             exit;

          }else if(pg_num_rows($result2) != 0){
             if(isset($_SESSION['logged-in']) || isset($_SESSION['user'])){
                   session_unset();
                   session_destroy();
                   }

         $_SESSION['logged-in'] = true;
         $_SESSION['user']=$usuario1; 
         header('location: http://localhost/public_html/teacherLv2.php');   
         exit;  

       }else { 

           $error = "WRONG DATA."; 
       }//
    pg_close($conn);

  } //else { $error = 'Don't leave blank spaces';}
 }//end of if server
 ?>

这是teacherLv3页面的代码:

<?php
session_start();

// is the one accessing this page logged in or not?

 if ( (!isset($_SESSION['logged-in']) && $_SESSION['logged-in'] !== true)) {

// not logged in, move to login page
session_destroy();
header('Location: login.php');
exit;
  }
?>

<html>
  <?  echo "Welcome back Teacher_Level 3 MASTER  {$_SESSION['user']} " ; ?>
</html>

这是teacherLv2页面的代码:     

// is the one accessing this page logged in or not?

 if ( (!isset($_SESSION['logged-in']) && $_SESSION['logged-in'] !== true)) {

// not logged in, move to login page
session_destroy();
header('Location: login.php');
exit;
  }
?>

<html>
  <?  echo "Welcome back Teacher_Level 2 MASTER  {$_SESSION['user']} " ; ?>
</html>

2 个答案:

答案 0 :(得分:0)

首先要做的事情......在页面顶部开始会话是一个很好的做法。因此,在第一个<?php标记之后,您开始会话session_start();

如果用户已经登录,则需要先取消设置会话变量。

所以,在您退出的那一刻,您可以这样做:

// everything fine for logout???
session_unset();
session_destroy();
// rederict to login / home page or whatever...

在登录部分:

if(pg_num_rows($result3) != 0 ) { //success
    if(isset($_SESSION['logged-in']) || isset($_SESSION['user']){
            session_unset();
            session_destroy();
        }
    $_SESSION['logged-in'] = true;
    $_SESSION['user']=$usuario1;
    header('location: http://localhost/public_html/teacherLv3.php');   
    exit;
}else if(pg_num_rows($result2) != 0){
    if(isset($_SESSION['logged-in']) || isset($_SESSION['user']){
            session_unset();
            session_destroy();
        }   
    $_SESSION['logged-in'] = true;
    $_SESSION['user']=$usuario1; 
    header('location: http://localhost/public_html/teacherLv2.php');   
    exit;  
}

修改

首先,您需要为用户创建一个唯一的字符串(在登录部分):

$r_addr = $_SERVER['REMOTE_ADDR'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$unique_string = hash('ripemd160', $user_agent . $r_addr);

然后,您需要在数据库中创建一个表,该表可以容纳username(了解哪个用户在哪里讨论)和unique_string以及您设置0 or 1的列是否注销(默认为0);

然后当您登录时,如果已经有unique_string的用户,则检查数据库,如果是,请更新它们(除了您自己的)并将logout column设置为1.然后检查是否那个unique_string已经被激活了,如果有的话,那就删除那个条目。然后在表格中插入您自己的数据。

然后在您检查用户是否已登录的任何地方,您还会在新建的表上执行查询,以获取注销状态(因此请检查usernameunique_string) 。状态为01。然后你做一点如果:

if(logout_status == 1 || no_result){ // also check for no result, because if so you an unregisterd user. The safest way to handle this is to logout and login again...
    // Do the logout with session_unset, session_destroy
}

答案 1 :(得分:0)

为什么不阻止其他人在已经有人登录时登录?

if($_SERVER['REQUEST_METHOD']=='POST' && empty($_SESSION['logged-in'])) {
    /* ... */
}