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






Этот тип данных должен храниться в сеансе, единственное, что переносится со страницы на страницу, - это данные сеанса (сеансы / файлы 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'] будет массивом со всеми деталями, которые вы выбрали из базы данных.
Вы правы, состояние вашего приложения не переносится от запроса к запросу.
В отличие от настольных приложений, веб-приложения не остаются инициализированными, потому что сервер каждый раз может быть другим посетителем, желающим чего-то совершенно другого. Вы знаете, кто использует настольное приложение, но не обязательно знаете, кто запрашивает страницу. Представьте, что 10 пользователей одновременно занимаются разными делами в вашем веб-приложении? Вы не будете постоянно запускать все приложение для каждого из этих посетителей. Представьте себе 10 000 посетителей ...
Однако есть способы сохранить некоторые данные от запроса к запросу. Да, приложение будет повторно инициализироваться каждый раз, но затем вы можете перезагрузить состояние того, что вы делали. Он всегда вращается вокруг одних и тех же общих методов:
Печенье; Файлы cookie - это небольшой файл, который хранится на стороне клиента и содержимое которого будет доступно вам по каждому запросу. В PHP это доступно с помощью Переменная $ _COOKIE. Во всех случаях вы можете сериализовать своих экземпляров классов и затем перезагрузить их. Проблема в том, что вы не захотите помещать туда конфиденциальные данные, поскольку любой (злонамеренный) орган может их увидеть и изменить.
POST или GET; В каждом запросе вы передаете состояние в $ _GET запрос (URL, такой как http: //localhost/myscript.php? iamatstep = 4. Или через $ _POST, например, используя скрытое поле ввода в форме. Эти данные могут быть зашифрованы и имеют смысл только для вас, но все же вы возвращать конфиденциальные данные клиенту, и каждый мог с ними возиться.
База данных, диск; Или что-нибудь еще на сервере. Опять же, вы сериализуете свои данные в файле, например, в конце запроса, готового к повторному использованию для следующего запроса. Главное преимущество в том, что он остается на вашем сервере. Обратной стороной является то, что на данный момент вы не знаете, какие данные для какого запроса извлекать обратно, поскольку в вашем приложении может одновременно быть несколько пользователей ...
И здесь в игру вступает понятие $ _SESSION. Это просто комплексный способ использования всего этого одновременно. Это не волшебство, как часто это воспринимают новички. Когда вы используете сеанс, данные, помещенные в $ _SESSION, хранятся где-то на сервере (обычно это файл во временном каталоге, хотя его можно изменить на что-то еще, например, в базу данных), и этому сеансу присваивается уникальный идентификатор и передается в файле cookie, который будет следовать за посетителем от запроса к запросу. Так что единственное, что на стороне клиента - это большое число в cookie. При следующем запросе браузер сообщает PHP на сервере, что это номер сеанса 12345, загружает соответствующий файл, если он существует, и затем данные снова становятся вам доступны. Если файлы cookie не включены, они могут быть переданы в GET или POST, хотя часто лучше не идти туда (см. примечание session.use_trans_sid).
Часто кажется, что на каждой из ваших страниц вам нужна аутентификация.
<?php
// verify if we have a current session
if (isset($_SESSION['login'])) {
// get data in current session
$username = $_SESSION['login']['username'];
$isLoggedIn = $_SESSION['login']['isLoggedIn'];
} else {
$username = '';
$isLoggedIn = false;
}
// take care of the unauthorized users
if (!$isLoggedIn) {
// maybe a redirection here...
}
// do the things a logged in users has the permission to do
И для настройки сеанса это, вероятно, будет выглядеть так:
<?php
// handle the form post of your login page for example
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
// verify the username and password against a database
if ($everythingIsOkay) {
// we can consider this user logged in and create a session
$_SESSION['login']['username'] = $username;
$_SESSION['login']['isLoggedIn'] = true;
// and now maybe redirect the user to the correct page
}
}
// raise an error about an invalid login
И, наконец, возможно, страница logout.php будет делать что-то вроде этого:
<?php
unset($_SESSION['login']);
// redirect the user to the login page