Область применения PHP

Я новичок в PHP. Каков наилучший способ контроля доступа к классу в PHP-приложении и где лучше всего хранить эти классы, к которым нужно будет обращаться во всем приложении? Пример; У меня есть пользовательский класс, который создается во время процесса входа в систему, но каждый раз, когда сообщение на странице появляется, что объект повторно инициализируется.

Я попытался установить свойство IsLoggedIn и затем проверять эту переменную каждый раз перед тем, как снова создать объект как новый, но это не похоже на работу. Я также попытался использовать функцию isSet в PHP, чтобы узнать, существует ли уже существующая переменная класса

2 ответа

Вы правы, состояние вашего приложения не переносится с запроса на запрос.

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

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

  • Печенье; Куки файлы - это небольшой файл, который хранится на стороне клиента и какой контент будет доступен по каждому запросу. В PHP это доступно с помощью $_ переменная COOKIE. Во всех случаях вы можете serialize ваши экземпляры классов и перезагружать их впоследствии. Проблема в том, что вы не захотите размещать там конфиденциальные данные, поскольку любое (вредоносное) тело может видеть и изменять его.

  • POST или GET; В каждом запросе вы передаете состояние в $_ GET-запрос (URL-адрес, такой как http://localhost/myscript.php?iamatstep=4. Или через $_ POST, например, используя скрытое поле ввода в форме. могут быть зашифрованы и иметь смысл только для вас, но все же вы отправляете конфиденциальные данные клиенту, и кто-нибудь может с этим поиграть.

  • База данных, диск; Или что-нибудь еще на сервере. Опять же, вы сериализуете свои данные в файле, например, в конце запроса, готового к повторному использованию для следующего запроса. Главное преимущество заключается в том, что он остается на вашем сервере. Недостатком является то, что на данный момент вы не знаете, какие данные извлекать обратно для какого запроса, поскольку одновременно может быть несколько пользователей в вашем приложении...

И здесь вступает в игру понятие $_ SESSION. Это всего лишь пакетный способ использования всего этого в одно и то же время. Он не волшебный, как часто его воспринимают новички. Когда вы используете сеанс, данные, помещенные в $_SESSION, хранятся где-то на сервере (обычно это файл во временном каталоге, хотя его можно изменить на нечто вроде базы данных), и уникальный идентификатор присваивается этому сеансу и передается в файле cookie, который будет следовать за посетителем с запросом на запрос. Таким образом, единственное, что на стороне клиента - большое количество в cookie. В следующем запросе браузер сообщает PHP на сервере, что он имеет номер сеанса 12345, загружает соответствующий файл, если он существует, и затем данные снова доступны для вас. Если файлы cookie не включены, их можно передать в GET или POST, хотя часто лучше не туда ходить (см. session.use_trans_sid note).

Это часто выглядит так, что на каждой из ваших страниц вам нужна аутентификация.

<p>И чтобы установить сеанс, он, вероятно, будет выглядеть следующим образом:</p> <code> <p>И, наконец, возможно, страница logout.php, которая сделает что-то вроде этого:</p>


Этот вид данных необходимо хранить в сеансе, единственное, что переносится со страницы на страницу, - это данные сеанса (сеансы/файлы cookie/...), поэтому инициализация вашего класса не переносится.

Вы можете добавить информацию, такую ​​как имя пользователя пользователя, к сеансу с помощью:

$username //username from db
$name //name from db
$_SESSION['username'] = $username;
$_SESSION['name'] = $name;

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

$_SESSION['user'] = mysql_fetch_assoc($result); //where $result is the response from the db to your login query

после этого $_SESSION ['user'] будет массивом со всеми сведениями, которые вы выбрали из базы данных.

licensed under cc by-sa 3.0 with attribution.