Ожидание ошибок при назначении $ _SESSION без запуска сеанса в PHP - PullRequest
1 голос
/ 18 июля 2011

Я не звоню session_start(), а php.ini имеет session.auto_start = 0.

Я все еще могу назначить переменные в области без ошибок? Файл cookie не установлен, но область действия по-прежнему доступна на всей странице. Должен ли PHP выдавать ошибку, если я не начал сеанс?

Ответы [ 3 ]

4 голосов
/ 18 июля 2011

Поскольку $ _ SESSION является суперглобальным, он всегда доступен во всех областях.

То, что сам сеанс не был инициализирован браузером, не означает, что эта переменная не существует. Он все еще там, чтобы быть использованным, и вы можете хранить его в любое время, но, насколько я понимаю, он будет уничтожен, если вы напишите ему, затем инициализируют сеанс. *

редактирование:

Этот код приводит к two => Second, как и ожидалось.

<?php
        $_SESSION['test'] = "string";
        session_start();
        $_SESSION['two'] = "Second";

        foreach( $_SESSION as $key => $val )
        {
                print $key . " => " . $val;
                print "<br />";
        }
?>
2 голосов
/ 18 июля 2011

вы можете присвоить $argc и $argv, хотя они определены только в CLI; Вы можете назначить $_FILES, $_SERVER и даже $GLOBALS. Все это переменные , и PHP не остановит вас, чтобы назначить новое значение. А поскольку это динамический язык и объявление переменной не требуется, это не остановит вас от инициализации переменной. Однако, если вы попытаетесь получить значение $_SESSION до того, как назначите ему что-либо, и перед вызовом session_start, это даст вам 'undefined variable' notice.

0 голосов
/ 18 июля 2011

Суперглобальный $ _SESSION всегда доступен, независимо от того, начали вы сеанс или нет.Единственное отличие состоит в том, что если вы никогда не наберете session_start() в своем коде или не запустите сеанс с автоматическим запуском через настройки .ini, все, что вы поместите в $ _SESSION, будет потеряно при выходе из скрипта.* То же самое относится ко всем суперглобалам - они всегда доступны.Есть массив $ _POST, даже если скрипт был вызван с помощью запроса GET, и есть массив $ _COOKIE, даже если вы вызываете скрипт в командной строке, когда не видно ни одного веб-сервера.

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