Что происходит с массивом $ _SESSION, если время сеанса PHP заканчивается в середине запроса?

StackOverflow https://stackoverflow.com/questions/1002935

  •  05-07-2019
  •  | 
  •  

Вопрос

Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:

session_start();

if(! isset(

Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:

session_start();

if(isset(

Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:

session_start();

if(! isset(

Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:

<*>

Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:

<*>SESSION['name'])) { echo 'Name is not set'; exit; } // imagine there is a bunch of code here and that the session times out while // this code is being executed echo 'Name is ',

Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:

<*>

Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:

<*>SESSION['name']; // will this line throw an error?

Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:

<*>SESSION['name'])) { $name =

Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:

session_start();

if(! isset(

Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:

<*>

Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:

<*>SESSION['name'])) { echo 'Name is not set'; exit; } // imagine there is a bunch of code here and that the session times out while // this code is being executed echo 'Name is ',

Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:

<*>

Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:

<*>SESSION['name']; // will this line throw an error?

Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:

<*>SESSION['name']; } else { echo 'Name is not set'; exit; } // bunch of code here echo 'Name is ', $name;

Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:

<*>SESSION['name'])) { echo 'Name is not set'; exit; } // imagine there is a bunch of code here and that the session times out while // this code is being executed echo 'Name is ',

Я всегда задавался вопросом: если время сеанса PHP заканчивается во время выполнения скрипта, будет ли содержимое массива $ _SESSION оставаться доступным до тех пор, пока не закончится выполнение скрипта? Например:

<*>

Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:

<*>SESSION['name']; // will this line throw an error?

Целесообразно ли копировать переменные сеанса в локальную область видимости, чтобы я мог прочитать их позже в сценарии, не проверяя время ожидания сеанса? Что-то вроде:

<*>
Это было полезно?

Решение

не беспокойся о таких вещах. С сеансом ничего не случится. Он инициализируется с помощью sessioni_start () и $ _ SESSION всегда будут доступны в вашем скрипте.

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

Время трехчасового сеанса по умолчанию сбрасывается при каждом открытии сеанса (см. session_cache_expire ), поэтому единственный способ, которым время ожидания сеанса может быть в середине запроса, это если запрос обрабатывается в течение трех часов. По умолчанию PHP запрашивает время ожидания только через 30 секунд, поэтому нет опасности истечения сеанса во время запроса. Кроме того, переменная $ _ SESSION не будет внезапно меняться в середине запроса. Он заполняется, когда начинается сессия, и все.

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

Однако, для ясности, имеет смысл скопировать его в локальную переменную. Особенно, если вы планируете использовать переменную несколько раз. Может быть трудно прочитать код, который имеет $ _SESSION ['variable'] повсюду.

Вам нужно было понять, как работают сессии. Клиент, обращающийся к сценарию с помощью суперглобального $ _SESSION, знает только ключ к сеансу, который ему принадлежит (хранится в Cookie / URL). Это означает, что сами данные сеанса не имеют ничего общего с клиентом. Если у вас есть ключ к данным сеанса, который вы хотите использовать, вы можете использовать его. В старых версиях PHP были некоторые дыры в безопасности, потому что сессии были где-то легко доступны (я не помню подробностей).

В основном, если у вас есть идентификатор сеанса в сценарии PHP, у вас есть доступ к этому сеансу, если только память на компьютере не очищена / жесткий диск не поврежден (т.е. перезагрузка компьютера / сбой устройства).

Надеюсь, это поможет, в противном случае зайдите на php.net и углубитесь в детали работы сессий.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top