2016-12-04 2 views
-2

У меня есть сценарий входа, который не использует SQL, потому что сервер не разрешает его. Как я могу запретить пользователям регистрироваться в одной учетной записи с разных компьютеров/браузеров? Я пробовал решения, которые я нашел здесь, в stackoverflow, но никто из них не работал. Вот мой PHP:запретить двум пользователям входить в ту же учетную запись

<?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

этот код не делает много смысла, люди если зарегистрированное имя пользователя соответствует имени пользователя сеанса. но как имя пользователя вошло в первую очередь на сеанс? –

+0

Если вам нужны пользовательские сессии и вы не можете использовать базы данных, у вас будет плохое время :) – Max

+0

Файловые сеансы по-прежнему стандартны @Max –

ответ

0

Давайте предположим, что продолжительность сеанса 15 минут. На всякий случай.

У вас нет доступа к db. Я думаю, вам нужно хранить дополнительную информацию в отдельном файле, например. 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 раньше, что текущая

+1

он утверждает, что он не имеет доступа к базе данных, так что таблицы пользователей –

+0

вы правы Обновленный ответ – piotr

+0

@Dagon Я использую строку для хранения информации о пользователе: $?. users = array ( 'user' => 'pass', ); –

Смежные вопросы