一旦用户已经登录,如何使用相同的电子邮件和密码停止多个用户登录

时间:2014-06-26 16:31:44

标签: php session cookies login

我需要帮助如何在用户已经登录网站时使用相同的电子邮件和密码停止多个用户登录我有网站但在我的网站上我有两种会员订阅free or paid免费用户可以尝试从多个设备或PC或浏览器登录对免费用户没有问题。

但现在问题是我想限制付费用户,因为付费用户不应该只是在付费用户从任何地方登录后从多个设备或PC或浏览器登录..而付费用户尝试登录然后系统应该自动注销付费来自以前的浏览器或设备或PC的用户?

示例*

if paid user already login from chrome and user trying to login from firefox
then system should automatically destroy first session which is created 
from chrome. then allow paid users to use their account in firefox.

此处为我的测试脚本

的index.php

<form action="verifylog.php" method="post">
<input type="text" name="email1" /><br />
<input type="password" name="password1" /><br />
<input type="submit" value="Submit" />
</form>

Verifylog.php

session_start();
include('config.php');
if(empty($_POST['email1']))
{
header('Location:index.php');   
}
$email=$_POST['email1'];
$password=$_POST['password1'];

$querymysql=mysql_query("select * from users where uemail='$email' 
and upass='$password'") or die ("query problem");

$row=mysql_fetch_array($querymysql);
$db_email1=$row['uemail'];
$db_pass=$row['upass'];
$db_status=$row['ustatus'];

if($row>0){

$_SESSION['new_email']=$db_email1;
$_SESSION['new_pass']=$db_pass;
$_SESSION['new_status']=$db_status;

$_SESSION['logged_in'] = 'active';

if(isset($_SESSION['logged_in']) || !empty($_POST['email1']) )
{

$query_time=mysql_query("UPDATE users SET ustatus='".$_SESSION['logged_in']."'
WHERE uemail='".$email."'");

header('Location:test.php');

}
}

if($db_status==$_SESSION['logged_in'])
{
header("location:logout.php");  
}
else 
{
$msg="please check your email and password";    
$_SESSION['error_msg']=$msg;
header('Location:index.php?error='.$_SESSION['error_msg'].'');

}

test.php的

<?php 
$querymysql=mysql_query("select * from users 
where  uemail='".$_SESSION['new_email']."'") or die ("query problem");
$row=mysql_fetch_array($querymysql);
?>

Hello Mr. <?php echo $row['uemail']; ?> <br />
Your Email Is &nbsp; <?php echo $row['uemail']; ?> <br />
Your Password Is &nbsp; <?php echo $row['upass']; ?> <br />
Your Status Is &nbsp; <?php echo $row['ustatus']; ?> <br />
Here Your Can Logout Your Account: <a href="logout.php">Click Here</a>

Logout.php

<?php 
session_start();
include('config.php');

if(!empty($_SESSION['logged_in']) || !empty($_POST['email1']) )
{
session_destroy();
$query_time=mysql_query("UPDATE users SET ustatus='inactive' 
    WHERE uemail='".$_SESSION['new_email']."'");

header("location:index.php");
}
?>

谢谢你我完成了我的剧本

如果有任何Web开发人员需要,我的完成

how to prevent multiple user login with same email and password once user 
already logged from multiple pc or browsers

的index.php

<form action="verifylog.php" method="post">
<input type="text" name="email1" /><br />
<input type="password" name="password1" /><br />
<input type="submit" value="Submit" />
</form>

Verifylog.php

session_start();
include('config.php');
if(empty($_POST['email1']))
{
header('Location:index.php');   
}
$email=$_POST['email1'];
$password=$_POST['password1'];

$querymysql=mysql_query("select * from users where uemail='$email' 
and upass='$password'") or die ("query problem");
$row=mysql_fetch_array($querymysql);

$db_email1=$row['uemail'];
$db_pass=$row['upass'];
$db_status=$row['ustatus'];
$db_sessionid=$row['session_id'];


$old_sessionid = session_id();
$new_sessionid = session_regenerate_id(true);
$_SESSION['newregid']=$new_sessionid;
$_SESSION['odlregid']=$old_sessionid;

$_SESSION['new_email']=$db_email1;
$_SESSION['new_pass']=$db_pass;
$_SESSION['new_status']=$db_status;


if(!empty($old_sessionid))
{

$query_time=mysql_query("UPDATE users SET session_id='".$old_sessionid."' 
WHERE uemail='".$email."'");

header('Location:test.php');
}

else if($db_sessionid!=$_SESSION['odlregid'])
{

$query_time=mysql_query("UPDATE users SET session_id='".$new_sessionid."' 
WHERE uemail='".$email."'");
header('Location:test.php');
}

test.php的

<?php 
$querymysql=mysql_query("select * from users 
    where uemail='".$_SESSION['new_email']."'") or die ("query problem");
$row=mysql_fetch_array($querymysql);
$new_id=$row['session_id'];

if($new_id!=$_SESSION['odlregid']){

unset($_SESSION['odlregid']);
session_destroy();
header("location:index.php");

} else { ?>

Hello Mr. <?php echo $row['uemail']; ?> <br />
Your Email Is &nbsp; <?php echo $row['uemail']; ?> <br />
Your Password Is &nbsp; <?php echo $row['upass']; ?> <br />
Your Status Is &nbsp; <?php echo $row['ustatus']; ?> <br />
Your Session_Id Is &nbsp; <?php echo $row['session_id']; ?> <br />
Here Your Can Logout Your Account: <a href="logout.php">Click Here</a>

<?php }?>

Logout.php

    <?php 
session_start();
include('config.php');  
header("location:index.php");   
?>

5 个答案:

答案 0 :(得分:1)

将会话ID与用户放在数据库中,并在每次登录时写入新的会话ID。作为select语句的一部分,请使用session_id作为条件,任何已解散的会话将不再有效。

答案 1 :(得分:1)

这是一种简单的方法,您可以尝试: -

1.)存储browser_name&amp; mac_address以及表格中的用户名,密码,状态(1&gt; loggedin; 0-&gt; notloggedin)列。

2.)在登录时,使用用户名,browser_name,mac_address,status&amp;还会更新表格列中的相同值。

在加载页面之前,请检查 -

3.)在每个页面的标题上,从db获取用户名,browser_name,mac_address并将其与存储在cookie中的值匹配。如果匹配则继续会话,如果不是结束会话。

每当用户尝试从chrome登录时,它将更新db中的值,如果在Firefox上发生页面刷新,则cookie和db的值将不匹配,从而导致自动注销。希望这有帮助。

或者你可以用存储&amp;匹配随机生成的唯一会话ID。

答案 2 :(得分:1)

你的答案几乎是正确的,但是它们有些错误,以下是需要添加到文件中的更改:

1)test.php的

session_start();
include('config.php');

2)Logout.php

session_start();
unset($_SESSION['odlregid']);
session_destroy();

答案 3 :(得分:0)

我不确定这是否可行,但您可以在付费用户的数据库中保存会话变量。如果他们再次登录则首先取消设置该会话并创建一个新会话。

答案 4 :(得分:0)

  1. 将PHP会话保存在数据库中。您可以在此处查看详细信息PHP sessions in Database
  2. 将用户会话与数据库和前端的会话ID相关联,触发ajax调用,不断检查会话的有效性。
  3. 如果在任何时间点此有效性中断,则强制退出并向用户显示已登录到其他设备/浏览器的消息。