阻止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> <br> </td></tr>
<table style="width: 80%;">
<tbody>
<tr style="height: 23px;">
<td style="width: 27%; height: 23px;"> Canal 1 si 2 10s</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"> Parola:</label> <input type="password" id="password" name="password" value="" /></p>
<p><input type="submit" name="submit" value="Autentificare" class="button"/></p>
</form>';
exit;
?>
让我们假设你的会话持续时间是15分钟。以防万一。
您没有数据库访问权限。我认为你必须在单独的文件中存储额外的信息,例如。 logged.txt。
拟议结构:
admin,2016-12-04 21:30
anotheruser,2016-12-04 21:30
其中线包含登录(唯一的用户名)和日期 - logged_to
相当于
对于我们通过file_get_contents
或getcsv
解析这个文件,然后保存其数据在每个请求阵列。每次更改或页面重新加载都需要解析文件,更新数据并将所有内容保存在该文件中。
当某人登录时,将logged_to
字段更新为将来的日期 - 距离当前时间+15分钟。当然,每当用户登录时重新加载页面,都应该在将来的日期再次更新这个字段:从当前时间开始+15分钟。
当用户注销时,只需从该文件中删除带有用户名的行。
当然,当用户试图登录时,你必须检查用户是否在logged.txt
文件是否存在,或者,如果存在,如果logged_to日期较早的是,目前的
他声称他没有数据库访问,所以什么用户表 – 2016-12-04 20:23:44
你是正确的答案更新 – piotr
@Dagon 我使用字符串存储用户信息: $?。 users = array( 'user'=>'pass', ); –
此代码不会做出很大的意义,人如果发布的用户名与会话用户名匹配,则登录。但用户名首先进入会话的方式如何? – 2016-12-04 20:18:49
如果你需要用户会话,不能使用数据库,你将有一个不好的时间:) – Max
基于文件的会话仍然是标准的@Max – 2016-12-04 20:22:28