Хранение пароля в самом файле cookie - это действительно плохая идея, не делайте этого.
На очень высоком уровне, я бы:
- Сформировать маркер (с чем-то вроде
md5
), который состоит из нескольких уникальных (пока последовательно) атрибуты для этого пользователя
- магазин как идентификатор пользователя и этот токен в cookie (разделенный каким-то известным разделителем)
- Когда пользователь посещает ваш сайт, вы можете разделить идентификатор и токен
- Используйте идентификатор, чтобы извлечь запись пользователя из базы данных, создать новую токена из записи БД и сравнить с маркером печенья
Итак, давайте рассмотрим это кратко. Скажем, $hash
- это хеш-пароль, хранящийся в базе данных, а также у вас есть переменные $userId
и $username
.
Я бы генерировать печенье, который выглядит примерно так:
$token = md5($userId . $username . $hash);
$cookie = $userID . "|" . $token; // 1|XXXXXXXX
Теперь, когда пользователь посещает ваш сайт, и вы получите это печенье:
$parts = explode("|",$cookie);
$userId = $parts[0];
$token = $parts[1];
Теперь вы знаете, кто является пользователь требуя, чтобы был, но вам нужно подтвердить.
Извлеките запись пользователя из базы данных, а затем восстановите токен и сравните.
// Assuming you just ran a SELECT query, and fetched the result into `$row`
$dbToken = md5($row['userId'] . $row['username'] . $row['hash']);
if($token == $dbToken) {
// The user is who he claims to be! Log them in
} else {
// The cookie token didn't match our re-generated token, don't trust this cookie
}
Имеют смысл? Вам, вероятно, придется немного изменить это для вашей ситуации. Надеюсь, это поможет вам хоть как-то пойти в хорошем направлении.
У меня был такой длинный ответ, говорящий то же самое, и тогда вы сказали это лучше. +1 хороший ответ. –
Я думаю, что сработало (как в настройке файлов cookie), и моя единственная проблема в том, что способ проверки cookie на самом деле не работает. [Код] (http://pastebin.com/2nGTDnF8) (См. Выделенную строку) – mrkirby153
@ mrkirby153 Рад, что подход, похоже, работает для вашей ситуации. Что касается отладки вашего класса, начните с выполнения 'print_r ($ _ COOKIE)', чтобы узнать, что у вас есть на самом деле. Может быть, массив файлов cookie не совсем то, что вы ожидаете? Может быть, 'verifyDatabase' не вызывается? Я думаю, что у вас есть некоторая общая отладка PHP для работы с точки зрения того, как работает ваш код, не связанный с тем, как токены файлов cookie работают. – jszobody