Функция PHP Autologin для входа в скрипт

Как я буду использовать функцию автолога для этого скрипта?

session_start(); $result = mysql_query("SELECT id FROM users WHERE username = '{$_POST['username']}' AND password = '{$_POST['password']}'"); if (isset($_POST['savelogin'])) { setcookie("SaveLogin", $_POST['username'], time()+3600); setcookie("SaveLogin", $_POST['password'], time()+3600); } if (mysql_num_rows($result) == 0) { exit('wrong username/password'); } else { $_SESSION['id'] = mysql_result($result, 0, 'id'); header("Location: ./"); } <form method="post"> Username: <input type="text" name="username" size="22" /><br> Password: <input type="password" name="password" size="22" /><br> <br> Autologin? <input type="checkbox" name="savelogin" /> <input type="submit" value="Login" /> </form> 

То, как далеко я получил. Сохранение имени пользователя и пароля. Но как мне это сделать, это автологин?

Related of "Функция PHP Autologin для входа в скрипт"

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

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

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

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

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

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

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

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

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

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

Вы должны взять свое имя пользователя, 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... }