session_start () в конструкторе класса Session (несколько сессий начинается на каждом URL или нет) - PullRequest
0 голосов
/ 01 февраля 2019
  • метод session_start () находится в конструкторе класса Session.php

  • Класс Session.php требуется в каждом заголовке страницы (require_once ('Session.php')))

Это означает, что класс Session будет включен снова, когда я перенаправлю на другой URL-адрес, и каждый раз будет запускаться новый сеанс.Это приведет к ошибкам.

Но этот фрагмент кода работает правильно, почему?

class Session {
    private $signed_in = false;
    public $user_id;
    private $is_admin;
    public $message;
    public $count;

    function __construct() {

        session_start();
        $this->visitor_count();
        $this->check_the_login();
        $this->check_message();
    }

} //End of Session Class

$session = new Session();

Почему я должен начинать новый сеанс при каждой инициализации класса Session

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Я бы отделил ваш сеансовый класс от команды session_start (звучит глупо, но терпеливо), чтобы избежать вероятности того, что вызовы будут запутаны и / или забыты и / или вызваны в неправильное время (после заголовков).

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

Примерно так (предполагается, что вы используете автозагрузчик композитора)

custom_autoload.php

<?php
    session_start();

    $loader = require __DIR__ . '/relative/path/to/vendor/autoload.php';

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

См. этот вопрос и ответы для хорошего руководства по использованию автозагрузчика композиторов, если ваш'eне знаком с этим.

0 голосов
/ 01 февраля 2019

Ваша проблема заключается в вызове session_start в середине кода:

http://php.net/manual/en/function.session-start.php

Примечание:

Чтобы использовать сеансы на основе файлов cookie, session_start () должен вызываться перед выводом чего-либо в браузер.

Попробуйте поместить его в начало файла, перед объявлением класса или в другое включение.

...