2016-05-19 2 views
1

Я не могу получить $_SESSION, чтобы просто создать сеанс user или admin.как остановить обе сеансы, выполняемые как «администратор», так и «пользователь»

Это содержимое счетов файла:

User||1234||user admin||1234||admin

Начало кода:

<?php session_start();?> 
<?php 
$username = $_POST['username']; 
$password = $_POST['password']; 
$level; 
$date = date("d.m.Y");` 

Текущий код:

if (isset($_POST['login'])){ 
    $file = explode(PHP_EOL, file_get_contents("Users/accounts.txt")); 
    $auth = false; 

foreach($file as $line) { 
    list($username, $password, $level) = explode("||", $line); 
    if ($_POST['username'] == $username && $_POST['password'] == $password) { 
     $auth = true; 
     break; 
    } 
} 

if($auth) { 
    echo "Login successfull!"; 
    $data = "Login successfull" . "\t" . "Username: " . $_POST['username'] . " Password: " . $_POST['password'] . " Level: " . $level . " Date: " . $date . "\r\n"; 
    file_put_contents('Users/logs.txt', $data, FILE_APPEND); 

    if($level = 'admin') { 
     $_SESSION['admin']=$username; 
     header('location: check.php'); 
    } 
    if($level = 'user') { 
     $_SESSION['user']=$username; 
     header('location: check.php'); 
    } 
} 
else { 
    echo "Invalid username or password"; 

    $data = "invalid login" . "\t" . "Username: " . $_POST['username'] . " Password: " . $_POST['password'] . " Level: " . $level . " Date: " . $date . "\r\n"; 

    file_put_contents('Users/logs.txt', $data, FILE_APPEND); 
    } 
} 
?> 

Current form: 

<form method="post"> 
<b>Username:</b><br> 
<input type="text" name="username" /><br>     
<b>Password:</b><br> 
<input type="password" name="password"/><br> 
<input type="submit" value="Login" name="login"/> 
<input type="reset" value="Reset" name="reset"/> 
</form>` 

Пожалуйста, помогите, у меня пытался изменить имена сеансов и других мелочей, но я c annot заставить его прекратить выполнение обоих сеансов, поскольку я пытаюсь остановить определенный сеанс от доступа к определенным страницам.

ответ

0

Если вы хотите прочитать файл строки за строкой, вы должны сделать это, прочитав весь файл, а затем попытайтесь использовать explode, это очень неэффективно (и, по-видимому, не делает то, что вы хотите). ли это:

$file = fopen("inputfile.txt", "r"); 
if ($file) { 
    while (($line = fgets($file)) !== false) { 
    list($username, $password, $level) = explode("||", $line); 
    if ($_POST['username'] == $username && $_POST['password'] == $password) { 
     $auth = true; 
     break; 
    } 
    } 
+0

Я сортировал не читают оба счета, но ваш делает работу тоже, но у меня возникли проблемы, когда я войти, как 'User' я все равно буду иметь доступ к' администратора session 'pages, я знаю, что это не то, что страницы, которые у меня есть, неправильно закодированы, потому что по какой-то причине даже при входе в систему как« Пользователь »он создаст оба сеанса« user »и« admin ». Вы можете помочь? –

+0

жаль, что я этого не заметил, внесите следующие изменения '$ level = 'admin'' =>' $ level ==' admin'' и '$ level = 'user'' =>' $ level == «user'' –

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