PHP: пользователь вошел в сессии и куки - PullRequest
1 голос
/ 24 февраля 2012

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

Может ли кто-нибудь описать базовый рабочий процесс для пользователя, который входит в систему и имеет набор файлов cookie, который будет держать их в журнале?в течение 30 дней?

На данный момент у меня есть следующее:

  1. Проверка и санитарная обработка введенных данных.
  2. Проверка предоставленных учетных данных по хешированному паролю bcrypt в БД.
  3. Если верно, вызовите функцию «Вход».
  4. Функция входа:

    a.Удалите все данные сеанса из БД с идентификатором пользователя (таблица с двумя столбцами: SessionString и UserID).
    b.Добавить новые данные сеанса в БД (новая случайно сгенерированная строка и идентификатор пользователя).
    c.Записать случайно сгенерированную строку и идентификатор пользователя в cookie.
    d.Установите $_SESSION("UserID") с помощью $userID.

Но хотя два куки создаются и записываются, $_SESSION("UserID") остается пустым ... Я предполагаю, потому что я не могу писать в $_SESSION в любое время, когда якак?

И даже если это исправлено, как я могу использовать данные, хранящиеся в cookie, для входа пользователя?Я предполагаю, что я не хочу идти в БД при каждой загрузке страницы.И все равно мне потребуется создать объект базы данных, чтобы проверить, в порядке ли учетные данные в cookie.Это правильный путь к этому?

Еще раз извинения за вопрос новичка!


ОБНОВЛЕНИЕ:
Да, я понимаю разницумежду $_SESSION переменными и куки.У меня также есть session_start() вверху каждой страницы (сразу после <php без пустых строк).$_SESSION("UserID") просто остается пустым.

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

<?php
session_start();

if(!isset($_SESSION['initiated'])) {
    session_regenerate_id();
    $_SESSION['initiated'] = true;
} 

Спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

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

безопасность сеансов в php

1 голос
/ 24 февраля 2012

Прежде всего, существует важная разница между сеансом и cookie. Когда вы используете $_SESSION[".."], вы создаете сеанс (который живет на сервере, по сравнению с cookie, который живет на клиенте), даже если браузер использует cookie для отслеживания идентификатора сеанса. Для создания файла cookie вы должны использовать метод setcookie () .

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

Примечание:

Чтобы иметь возможность записи в сеанс, вам может потребоваться вызвать session_start(); до получения или установки переменной сеанса с помощью $_SESSION[".."].

1 голос
/ 24 февраля 2012

Вы написали собственный обработчик сеанса, в котором ваши файлы сеансов хранятся в БД? Я полагаю, что нет.

Если вы хотите использовать $_SESSION, вы должны также сделать session_start(). При использовании PHP-сессий для вас будет установлен cookie для идентификации пользователя. Вы также получите файлы сессий, созданные в вашем каталоге / tmp. Это место, где будут храниться ваши переменные и все, что вы назначите для $_SESSION.

Если вы не определите пользовательский обработчик сеанса, который будет управлять расположением файлов сеанса, вам не нужно будет запрашивать вашу базу данных. Просто сохраните учетные данные пользователя в $_SESSION.

См. Это руководство по использованию сессий PHP.

PS: Вы получаете доступ к массивам следующим образом: $_SESSION["UserID"], а не с ().

...