использование информации зарегистрированного пользователя на всех страницах

#php #login

#php #аутентификация

Вопрос:

я использую следующий код пароля http://www.zubrag.com/scripts/password-protect.php

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

 <?php require("/home/abcd/abcd/password_protect.php"); ?>
  

я повторяю имя, используя

 echo "Welcome $login";
  

Комментарии:

1. сохраните его в $_session, посмотрите в примере evolt.org/node/60265

2. Этот скрипт, который вы загрузили, ошибочен во многих отношениях. Я предлагаю вам начать изучать другие механизмы входа в систему. Начните с тех, которые не хранят имя пользователя и / или пароль (будь то хэшированный, даже если соленый) в файле cookie, затем посмотрите на те, которые не используют GET для выхода из системы, будьте осторожны с теми, которые выводят информацию о пути, забудьте о хранении паролей открытым текстом и непозвольте им очистить переменные POST, чтобы другие сценарии, которые вы не используете, не зависали и не записывались. О, и особенно не доверяйте скриптам, которые перебирают всех ваших пользователей, чтобы выяснить, кто пытается войти в систему.

Ответ №1:

В основном скрипт выполняет то, что у него есть предварительно инициализированный список логинов и паролей, хранящихся в массиве $LOGIN_INFORMATION .

 $LOGIN_INFORMATION = array(
  'zubrag' => 'root',
  'test' => 'testpass',
  'admin' => 'passwd'
);
  

Теперь он принимает комбинацию логин / пароль от пользователя и соответствует сохраненным значениям.
Согласно вашему вопросу, вы хотите показать имя аутентифицированного пользователя.

Для этого вы можете использовать сеанс

В начале страницы (в самой первой строке) напишите

 `session_start();`
  

затем
$_SESSION['username'] = $username //имя пользователя, прошедшего проверку подлинности

Теперь в начале каждой страницы, где вы хотите напечатать имя, напишите

 session_start();
  

затем

 echo $_SESSION['username'];
  

После того, как вы закончите и захотите выйти из системы (или отменить сеанс), напишите

 session_unregister('username');
  

Ответ №2:

Этот скрипт сохраняет хэш имени пользователя и пароля в файл cookie с именем verify :

 setcookie("verify", md5($login.'%'.$pass), $timeout, '/');
  

Таким образом, вы не можете извлечь файл $login напрямую, однако вы можете перебирать возможности, $LOGIN_INFORMATION пока не найдете его:

 $login = null;
$found = false;
foreach($LOGIN_INFORMATION as $key=>$val) {
  $lp = (USE_USERNAME ? $key : '') .'%'.$val;
  if ($_COOKIE['verify'] == md5($lp)) {
    $found = true;
    $login = $key;
  }
}
  

Комментарии:

1. привет, Бенджи Гиллам. Спасибо за ответ. должен ли я изменить существующий скрипт на приведенный выше или добавить что-то на страницы, на которые я включаю файл password_protect

2. Простое добавление приведенного выше кода на ваши страницы должно сработать, но вы могли бы сделать это проще, отредактировав скрипт, просто добавьте $login = $key; after $found=true; в исходный password_protect.php файл.

Ответ №3:

в начале каждой страницы:

 session_start();
  

при успешной аутентификации пользователя:

 $_SESSION['keyname'] = 'value';
  

везде, где вам нужно получить к нему доступ:

 echo $_SESSION['keyname']