阻止2个用户登录到同一个帐户

问题描述:

我有一个登录脚本,它不使用SQL,因为服务器不允许它。 如何防止用户从不同的机器/浏览器登录到同一个帐户? 我已经尝试了我在这里找到的解决方案,但没有一个工作。 这是我的PHP:阻止2个用户登录到同一个帐户

<?php 
session_start(); 


define('DS', TRUE); // used to protect includes 
define('USERNAME', $_SESSION['username']); 
define('SELF', $_SERVER['PHP_SELF']); 

if (!USERNAME or isset($_GET['logout'])) 
include('login.php'); 

// everything below will show after correct login 
echo '   <p>Te-ai conectat ca '; 
echo $_SESSION['username']; 
echo '</p> 
      <p><a href="?logout=1">Inchidere sesiune</a></p> 
      <tr><td>&nbsp;<br>&nbsp;</td></tr> 
      <table style="width: 80%;"> 
<tbody> 
<tr style="height: 23px;"> 
<td style="width: 27%; height: 23px;">&nbsp;Canal&nbsp;1&nbsp;si&nbsp;2&nbsp10s</td> 
<td style="width: 18.7131%; height: 23px;"><audio controls="controls" preload="none"><source src="http://t22sys.noip.me:9300/;stream.mp3" type="audio/mp3">Your browser does not support the audio element.</audio></td> 
<td style="width: 27%; height: 23px;"> <a href="http://t22sys.noip.me:9300/listen.pls" style="color:black"><button type="button">Asculta in player extern</button></a></td> 
</tr> 
</tbody> 
</table> 
<br> 
'; 
?> 

登录PHP如下:

<?php defined('DS') OR die('No direct access allowed.'); 
$users = array(
'user'=>'pass', 
); 
if(isset($_GET['logout'])) { 
    $_SESSION['username'] = ''; 
    header('Location: ' . $_SERVER['PHP_SELF']); 
    } 
    if(isset($_POST['username'])) 
{ 
    if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) 
    { 
     $_SESSION['username'] = $_POST['username']; 
     header('Location: ' . $_SERVER['PHP_SELF']); 
     } 
     else 
     { 
      echo "<p>Eroare la autentificare</p>"; 
      } 
} 
echo '<form method="post" action="'.SELF.'"> 
<p>Autentificare membrii (Canal 1 si 2 fara delay, 128kbps)</p> 
<p><label for="username">Utilizator:</label> <input type="text" id="username" name="username" value="" /></p> 
<p><label for="password">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parola:</label> <input type="password" id="password" name="password" value="" /></p> 
<p><input type="submit" name="submit" value="Autentificare" class="button"/></p> 
</form>'; 
exit; 
?> 
+1

此代码不会做出很大的意义,人如果发布的用户名与会话用户名匹配,则登录。但用户名首先进入会话的方式如何? – 2016-12-04 20:18:49

+0

如果你需要用户会话,不能使用数据库,你将有一个不好的时间:) – Max

+0

基于文件的会话仍然是标准的@Max – 2016-12-04 20:22:28

让我们假设你的会话持续时间是15分钟。以防万一。

您没有数据库访问权限。我认为你必须在单独的文件中存储额外的信息,例如。 logged.txt。

拟议结构:

admin,2016-12-04 21:30 
anotheruser,2016-12-04 21:30 

其中线包含登录(唯一的用户名)和日期 - logged_to相当于

对于我们通过file_get_contentsgetcsv解析这个文件,然后保存其数据在每个请求阵列。每次更改或页面重新加载都需要解析文件,更新数据并将所有内容保存在该文件中。

当某人登录时,将logged_to字段更新为将来的日期 - 距离当前时间+15分钟。当然,每当用户登录时重新加载页面,都应该在将来的日期再次更新这个字段:从当前时间开始+15分钟。

当用户注销时,只需从该文件中删除带有用户名的行。

当然,当用户试图登录时,你必须检查用户是否在logged.txt文件是否存在,或者,如果存在,如果logged_to日期较早的是,目前的

+1

他声称他没有数据库访问,所以什么用户表 – 2016-12-04 20:23:44

+0

你是正确的答案更新 – piotr

+0

@Dagon 我使用字符串存储用户信息: $?。 users = array( 'user'=>'pass', ); –