Intereting Posts
Разделение строк PHP Дизайн дизайна реестра … хороший или плохой? шифрование пароля с использованием php Длинное целое преобразуется при вставке в более короткий столбец, а не усечен. Зачем? Какова формула? интеграция цифровых товаров в PayPal, как включить оплату в качестве гостя? Force Загрузка файлов с PHP Получить все элементы по имени класса с помощью DOMDocument Как эмулировать POSTing несколько полей формы флажка myField с Zend_Http_Client? Удалите элементы одного массива, если он найден в другом PHP: функция группировки массива объектов по значению Как преобразовать десятичную дробь во времени, например. НН: ММ: СС Использование одиночной или двойной кавычки awk Как получить контент из определенных тегов при использовании file_get_contents Вставьте значение NULL в поле базы данных с символом char (2) как тип Как использовать preg_replace, чтобы добавить один час к значению времени?

как создать безопасную систему регистрации php, позволяющую использовать функцию «сохранить меня в системе»?

Я использую простую систему входа, основанную на VES СЕССИИ. После входа пользователя в систему установлен параметр var var, который сообщает моему скрипту, что пользователь должен быть принят. Я не использую какой-либо пользовательский cookie cookie clientide.

Я хотел бы предложить вариант на экране входа в систему, в котором говорится: «Держите меня в лотерею за весь день». Как сделать это безопасным способом?

Solutions Collecting From Web of "как создать безопасную систему регистрации php, позволяющую использовать функцию «сохранить меня в системе»?"

Сначала: session.cookie_lifetime директиву session.cookie_lifetime либо в php.ini, либо в файлах конфигурации, либо через session_set_cookie_params() .

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

Естественное истечение сеанса cookie должно, как правило, содержать вещи в порядке, так как вы не сможете выходить из системы в середине своей сессии (если, конечно, звезды выровнены для него), если они будут поддерживать его. В противном случае я считаю, что решение eCartoth займет второе место, поскольку вы можете просто добавить вторую строку в оператор if:

 if (my_validate_user_function($_SESSION['username'],$_SESSION['passhash']) && $_SESSION['deathstamp'] > time() ) { // user is logged in again, oh boy! } else { // send in the death robots header('Location: /login.php',true,302); } 

EDIT: Одна вещь, которую вы, возможно, захотите рассмотреть, – это фиксация сеанса и / или захват сеанса. Чтобы это предотвратить, я бы рекомендовал один (или оба) из двух решений:

  1. хранить IP-адрес пользователя в сеансе
  2. используйте session_regenerate_id() после каждой успешной попытки входа в систему.

Когда вы говорите «держите меня зарегистрированным в течение всего дня», я предполагаю, что вы имеете в виду только эту конкретную машину, правильно? Вы можете использовать таблицу mysql для запоминания «времени входа в систему» ​​или отметки времени, когда этот логин больше не будет действительным, если они захотят войти в систему весь день. Затем добавьте скрипт в начало вашего кода, который извлекает идентификатор этого пользователя из сеансовых варов. Сравните текущую временную метку этого пользователя с сохраненными «последними действительными ts», и если это прошло, вы знаете, что они должны быть выведены из системы, после чего вы протрите сеанс и заставите пользователя снова войти в систему. Этот метод означает, что они фактически не будут выходить из системы, пока они не попытаются сделать что-то в прошлом, но им это будет похоже. Кроме того, вместо использования mysql DB вы также можете сохранить этот последний действительный TS в переменной сеанса.

Так, например, когда пользователь сначала регистрируется в «сохранить меня во всех выбранных днях»:

 $_SESSION['log_me_out_at'] = strtotime(date("Ymd ")."23:59:59"); 

Затем каждый раз, когда страница доступна в вашей системе:

 if( $_SESSION['log_me_out_at'] < time() ){ unset($_SESSION['user_is_accepted_in']); } с if( $_SESSION['log_me_out_at'] < time() ){ unset($_SESSION['user_is_accepted_in']); } 

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

Самый простой (хотя и не рекомендуемый) способ сделать то, что вы ищете, – это установить $_COOKIE с именем пользователя и паролем на компьютере, который ваш сайт будет проверять, когда пользователь подписывается.

Для дополнительной безопасности вам будет лучше сохранить только один файл cookie в виде соленого MD5-хэша данных пользователя, чтобы предоставить потенциальному хакеру меньше информации о данных учетной записи пользователя. Продолжительность может быть установлена ​​при настройке файла cookie; php.net имеет достаточно полную документацию о том, как это сделать.