如何使用php防止在同一浏览器中多次登录

时间:2013-06-28 08:16:22

标签: php session login session-variables url-redirection

这是php会话问题..用户可以多次登录..在同一浏览器上使用相同/不同的凭据..

1)User1登录..

2)User1尝试在新标签中打开LoginIndex.php ..

3)它显示了LoginIndex.php页面而不是Previous Logged in页面(User1已登录)...

4)接受User1再次使用相同/不同的凭据登录..在同一浏览器中

我不知道为什么它会再次取得登录值..

以下是LoginViewController.php的片段

           <?php        

       if (!isset($_POST['submit'])) 
     {


       ?>
            <html>

        <table align="center">
              <tr>

                 <td>
                    <input  class="input" type="text" name="uname" id="uid"  placeholder="Username"  >
                </td>
             </tr>
             <tr>

                <td>
                    <input  class="input" type="password" name="pwd" id="pid" placeholder="Password" >
                </td>
            </tr>

              <tr>
                <td> <input type="submit"  name="submit" value="" > </td>
            </tr>
      </table>

     <?PHP 

      }        

      else
   {

//If you are submitting the form insert the details into database

       $Username = $_POST['uname'];
          $Password = $_POST['pwd'];

            session_start();



     If (!(empty($Username) && empty($Password))) 
      {

      $model = new UsersModel();

      $rowsCount = $model->checkUser($Username,$Password,$User_Type);


       if ($rowsCount!=0)
       {
        $_SESSION['user'] = $Username;

        header("location:loggedin.php");

         } else 
        {
        echo '<script type="text/javascript">alert("Enter username and password correctly");
        window.location.href="LoginViewController.php";</script>';
        }
        }

         }
          ?>      

这是我正在处理它的登录的.php代码...

       <?php

          header("Cache-Control: private, must-revalidate, max-age=0");
           header("Pragma: no-cache");
           header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

               include('GenericClasses/GenericCollectionClass.php');
               include('Models/UsersModel.php');
               include('DataObjects/Users.php');
               include('DatabaseAccess/DBHandler.php');

         session_start();
        if(!isset($_SESSION['user']))
      {
       header('Location: LoginViewController.php');
        exit();
        }
         echo '"<div style="background:white; text-align:right"> Login as:'.$_SESSION['user'].'
     <a href="LogoutViewController.php" style="text-align:right">Logout</a></div>"';


      ?>

任何建议都可以接受......

3 个答案:

答案 0 :(得分:1)

在logged-in.php文件中session_unset()之前的session_start(),删除所有会话数据。

答案 1 :(得分:1)

在loginController中,您需要检查会话变量是否已设置。如果是,则将用户重定向到成员页面或类似页面。

这可能有效

<?php
session_start();
if(!empty($_SESSION['username']))
{
    header("location : member.php");
    die();
}
?>

答案 2 :(得分:0)

session_unset()摆脱所有当前会话变量之前

session_start(),因此您在检查之前删除了$_SESSION['username']

此外,您似乎正在使用某种框架或大多数框架所具有的类似MVC的系统,但是您正在使用自己的极其基本的身份验证系统?为什么不直接使用其中一个流行的框架并修改它?所有主要的都有自己的内置安全认证系统,他们通常会有大量社区制作的软件包,为系统引入新功能。