Область действия класса PHP

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
1 282
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Этот тип данных должен храниться в сеансе, единственное, что переносится со страницы на страницу, - это данные сеанса (сеансы / файлы 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 посетителей ...

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

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

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

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

И здесь в игру вступает понятие $ _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

Другие вопросы по теме