2016-12-04 167 views
-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

回答

0

讓我們假設你的會話持續時間是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', ); –

相關問題