2013-07-17 3 views
2

Я надеялся, что кто-то сможет помочь с этой небольшой проблемой, с которой я работаю. Пожалуйста, имейте в виду, это просто место для хобби, я знаю, что есть дыры в безопасности. Я написал функцию set_remember_cookies, которая вызывается из моего сценария входа и страницы регистрации, когда пользователь проверяет флажок «запомнить меня».Функция setcookie PHP не сохраняет файлы cookie?

Функция на каждой защищенной странице, то происходит следующее:

  1. Проверяет, если помнить печенье установлены
  2. Запросы к базе данных, чтобы найти user_id, связанного с хеширован пользователя в куки
  3. Получает пароль для этого User_ID из таблицы пользователя
  4. Получает соль из таблицы remember_cookies
  5. Хэширует пароль + соль и сопоставляет его с хэшей p совпадение в файле cookie

Опять же, я знаю, что хранить cookie-файл даже в хэшированном пароле небезопасно, но я не беспокоюсь об этом сейчас.

Моя проблема в том, что функция set_remember_cookies, которую я включил ниже, фактически не устанавливает файлы cookie. На защищенных страницах первый шаг (проверка наличия файлов cookie) завершается с ошибкой. Я также проверял в браузере файлы cookie, и они не сохраняются.

Может ли кто-нибудь объяснить мне, почему эта функция не устанавливает файлы cookie? Я не могу найти никаких ошибок, но, надеюсь, кто-то может! Благодаря!

<?php 
     function set_remember_cookies($uid, $identifier, $password) { 
      mysql_query("DELETE FROM remember_cookies WHERE User_ID = '$uid'"); //Delete old cookie records 
      $salt = sha1(uniqid(time() . $_SERVER['HTTP_REFERER'])); 
      $username_hash = hash("sha256", $identifier . $salt); //Hash the username 
      if (mysql_query("INSERT INTO remember_cookies (User_ID, Username_Hash, Salt) VALUES ('$uid', '$username_hash', '$salt')")) { 
       setcookie("Username", $username_hash, 60*60*24*365); 
       setcookie("Password", hash("sha512", $password . $salt), 60*60*24*365); 
      } 
     } 
    ?> 

ответ

6

Ваши файлы cookie истекли в 1971 году! Похоже, вы хотите компенсировать один год в будущем, поэтому постарайтесь

setcookie("Username", $username_hash, time() + 60*60*24*365); 

Третий параметр не смещение от «теперь», это смещение от начала Unix epoch - rather fine manuals действительно делают это ясно :)

+0

Ну ... У меня было ощущение, что я пропустил что-то простое! Я использовал файлы cookie раньше и должен перечитать эти документы примерно 3 раза сегодня. Ну, иногда вам нужно, чтобы кто-то еще что-то указывал, я думаю, lol! Спасибо! – HockeyRef45

1

setcookie(name, $value, $expire);

Согласно Руководству: вам нужно добавить истекать время от времени()

Время истечения куки. Это временная метка Unix, так что это число секунд с эпохи. Другими словами, вы, скорее всего, установите с помощью функции time() плюс количество секунд, прежде чем вы получите . Или вы можете использовать mktime(). time() + 60 * 60 * 24 * 30 будет установить срок действия файла cookie через 30 дней. Если установлено значение 0 или опущено, cookie истечет в конце сеанса (когда браузер закрывается).

Смежные вопросы