Работа с куки и сессией внутри класса PHP - PullRequest
0 голосов
/ 17 января 2012

У меня есть некоторая функция (вставленная ниже небольшого фрагмента функции), которую я использовал как отдельную функцию, и она работала хорошо.

Теперь я хочу переместить эту функцию в какой-нибудь класс.Как видите, он работает с $_SESSION и $_COOKIE.

Вопрос в том, требуется ли отправлять $_SESSION и $_COOKIE в качестве входных данных при вызове этой функции (я имею в виду что-то вроде этого: вызов типа protect($_SESSION, $_COOKIE), а затем извлечение их из внутренней функции)?или это будет работать без их отправки?

...
public function protect() {
    session_start();

    if (isset($_SESSION['HTTP_USER_AGENT'])) {
        if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) {
            $this->logout();
            exit;
        }
    }

    if (!isset($_SESSION['id']) && !isset($_SESSION['login'])) {
        if (isset($_COOKIE['id']) && isset($_COOKIE['key'])) {

 ...

Ответы [ 3 ]

3 голосов
/ 17 января 2012

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

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

2 голосов
/ 17 января 2012

$_SESSION И $_COOKIE являются суперглобалами, то есть они доступны во всех областях. Поэтому нет необходимости передавать их в качестве параметров функциям.

Однако есть преимущество в том, что они передаются в качестве параметров при запуске модульного тестирования. Параметры значительно упростят тестирование значений для функции без необходимости их доступности в $_SESSION или $_COOKIE.

1 голос
/ 17 января 2012

Вам не нужно передавать переменные $_SESSION или $_COOKIE, поскольку они являются суперглобальными - доступными из любого места ... из документов :

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

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