Автофункция входа в систему PHP к сценарию входа в систему

Я предполагаю, что буквальный перевод был бы:

 mydict = {'foo' : { 'bar' : { 'baz':1}}}

Вызов:

 >>> mydict['foo']['bar']['baz']

дает Вам 1.

, Который смотрит немного общего количества мне, все же.

(я не парень жемчуга, тем не менее, таким образом, я предполагаю то, что Ваш жемчуг делает)

5
задан 5 September 2009 в 02:45
поделиться

3 ответа

Во-первых, вы не хотите сохранять имя пользователя и пароль в cookie. Это плохая идея.

Простой способ подумать об этом:

1) Создайте новое поле в таблице пользователей, в котором хранится хеш MD5. Вы можете назвать его ключ_сессии.
2) Когда вы отправляете страницу, сценарий должен сделать следующее.

  • Проверить имя пользователя и пароль
  • Если это правильная пара имени пользователя и пароля, проверьте переменную saveLogin
  • Если установлена ​​переменная saveLogin , сгенерируйте md5 и сохраните его в базе данных. Также сохраните этот md5 в файле cookie. Убедитесь, что в таблице базы данных есть поле cookie-expires.
  • Создайте необходимые данные сеанса.
  • Перенаправьте на ./

3) На своей странице ./ выполните следующие действия:

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

Это должно сделать ваше приложение более безопасным. Возможно, это не лучший способ кодирования,

13
ответ дан 18 December 2019 в 07:30
поделиться

Это очень небезопасный метод автоматического входа в систему. Никогда не следует хранить пароль где-либо в виде открытого текста.

Лучшая стратегия заключается в следующем:

  1. Представьте обычную форму входа в систему с флажком для «автоматического входа в систему».
    • Если отмечено поле автоматического входа в систему, вы проверяете их имя пользователя и пароль обычным образом. В случае успеха вы можете установить специальный файл cookie для автоматического входа в систему.
    • Дайте этому специальному файлу cookie имя, например «autologin», и значение, содержащее их имя пользователя и соленый хэш md5 их пользовательских данных. Что-то вроде "user = username & hash = 123456xyz.etc".
    • Когда вы в следующий раз увидите пользователя и захотите автоматически войти в систему, вы проверяете этот специальный файл cookie и проверяете его содержимое. Разделите имя пользователя и хэш, затем извлеките учетную запись из базы данных на основе имени пользователя и повторно выполните md5 для сравнения с хеш-данными cookie. Если он действителен, вы можете войти в систему (т.е. начать новый сеанс).
5
ответ дан 18 December 2019 в 07:30
поделиться

Вы должны взять их имя пользователя, IP-адрес и какой-то хэш (как предлагал зомбат), зашифровать все это (возможно, используя Base64) и сохранить полученную строку как их cookie. Таким образом, кто-то не сможет подделать или украсть cookie, потому что даже если бы они это сделали, расшифрованный IP-адрес не будет соответствовать IP-адресу, с которого исходил запрос. Также лучше использовать белые списки вместо того, чтобы отбрасывать вводимые пользователем данные в запрос.

Таким образом, вы получите что-то вроде:

//First see if the auto-login cookie exists and is valid:

if($_COOKIE['autologin']) {
$users_query = "SELECT username FROM users WHERE last_login < SUBDATE(CURDATE(),30)";
$users_results = mysql_query($users_query);
while($row = mysql_fetch_assoc($users_result)) {
    $users = $row['username'];
}
$auto_cookie = $_COOKIE['autologin'];

$user_creds = explode("//", base64_decode($auto_cookie));

$user_name = $user_creds[0];
$user_IP = $user_creds[1];
$user_hash = $user_creds[2];

$username_check = (in_array($user_name, $users) ? true : false;
$userIP_check = ($user_IP = $_SERVER['REMOTE_ADDR']) ? true :false;

$so_far_so_good = ($username_check && $userIP_check) ? true : false;

if($so_far_so_good) {
$hash_query = "SELECT hash FROM userhash WHERE username = '$user_name'";
$hash_results = mysql_query($hash_query);
$all_clear = ($user_hash == mysql_result($hash_results,0)) ? true : false;
}

}

//Checks Login Data:
if($_POST) {
    $users_query = "SELECT username FROM users";
$users_results = mysql_query($users_query);
while($row = mysql_fetch_assoc($users_result)) {
    $users = $row['username'];
}

$username_check = (in_array($user_name, $users) ? true : false;

$password_check = password_check();
// I do not feel comfortable enough with encryption and authentication to suggest
// a method here. Suffice to say, you should have a strong password check system.

$all_clear = ($username_check && $password_check) ? true : false;

// You should only throw a log in error when they have attempted a login. Do not
// give hints at your authentication methods in auto-login section.

$set_cookie = ($all_clear && $_POST['set-auto']) ? true : false;
if($set_cookie) {
   $new_hash = hash_maker();
   // Again, look to the others for best hashing technique.
   $raw_cookie_data = $user_name . "//" . $_SERVER['REMOTE_ADDR'] . "//" . $new_hash;
   $enc_cookie_data = base64_encode($raw_cookie_data);
   setcookie("autologin", $enc_cookie_data, time()+3600);
    }
}

if($all_clear) {
   echo "Welcome Back!";
  }
 else {
    //print login form here...
 }
2
ответ дан 18 December 2019 в 07:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: