Проблема с файлами cookie и сессиями PHP - PullRequest
1 голос
/ 14 февраля 2010

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

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

, поэтому я должен сделать, если (isLoggedIn ()) показывает меню. Но это запрос каждый раз, когда страница загружается, поэтому он не очень хорош

Есть предложения?

Ответы [ 5 ]

1 голос
/ 14 февраля 2010

Вы можете сделать это:

session_start();

// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['loggedIn'])) {
  $_SESSION['loggedIn'] = true;

  // Add all the relevant user information data
  $_SESSION['username'] = $username;
  $_SESSION['password'] = $password;
  $_SESSION['etc'] = $etc;
}

Затем вы можете запросить данные пользователя в глобальном массиве $ _SESSION. Например: запрос, если пользователь вошел в систему (не забудьте сначала вызвать session_start ()):

function isLoggedIn() {
    return (isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']);
}

Если вы хотите выйти из системы:

session_destroy();

Время ожидания может быть обработано в файле php.ini:

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440

Или вы можете обрабатывать переменные ini во время выполнения, используя ini_set:

ini_set('session.gc_maxlifetime', $sessionMaxLifeTime);
0 голосов
/ 14 февраля 2010

PHP $ _SESSION основывается на файлах, поэтому при использовании этого не происходит попадания в БД (хотя БД почти всегда быстрее, чем поиск файлов, так что это может быть не так уж полезно).используйте кэш в памяти, такой как memcached.

Или, для немного меньшей безопасности, вы можете хранить второй cookie со временем и хэшем.Выпуская его, вы объединяете настоящее время и секретную соль, известную только логике вашего приложения, а затем md5 () или sha1 ().При каждом просмотре вы просто проверяете, что время в файле cookie находится в пределах последнего часа (или любого периода времени, который вы настраиваете), и что хеш действителен.Он может быть подделан в течение часа, и вам нужно будет проверить законные сессии каким-либо другим способом, но этого может быть достаточно только для пунктов меню.

0 голосов
/ 14 февраля 2010

вы можете использовать сессии в php для этого. Добавить session_start (); на ваши страницы, после входа в систему, может быть, снова, когда база данных установит флаг в сеансе.

// user logged in sucessful
$_SESSION['logged_in'] = true;

Чем проверить на своих страницах:

if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) {
 // display menu item
}
0 голосов
/ 14 февраля 2010

Используйте http://php.net/manual/en/function.setcookie.php сразу после входа в систему, чтобы установить флаг, затем используйте $ _COOKIES для проверки этого флага. В качестве альтернативы вы можете установить этот флаг на $ _SESSION и затем проверить его там.

0 голосов
/ 14 февраля 2010

Вы можете использовать функцию setcookie для создания файла cookie и использовать эту функцию, чтобы проверить, установлен ли файл cookie loggedIn, а не ложь. :)

function isLoggedIn() {
    return (isset($_COOKIE['loggedIn']) && $_COOKIE['loggedIn']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...