Является ли PHP session_start () идемпотентным? - PullRequest
1 голос
/ 11 февраля 2012

Что сказано выше. Неудивительно, что я не смог найти четкого ответа на этот вопрос.

Я просто хочу знать, не вызовет ли это более одного раза в скрипте.

Ответы [ 3 ]

3 голосов
/ 11 февраля 2012

Цитирование руководство :

Начиная с PHP 4.3.3, вызов session_start() после сеанса был ранее запущенный приведет к ошибке уровня E_NOTICE.
Также второй сеанс будет просто проигнорирован.

Таким образом, он не будет делать ничего, кроме как поднять уведомление, которое указывает, что есть какая-то проблема ; Это означает, что вы не должны вызывать эту функцию более одного раза.


Редактировать после комментария @ hakre: Просто чтобы быть уверенным, я протестировал следующую часть кода, которая дважды вызывает session_start (), после того, как были получены сообщения об ошибках и уведомления :

<?php
ini_set('display_errors', 'on');
error_reporting(E_ALL | E_STRICT);

session_start();
session_start();

И я получаю следующее уведомление:

Notice: A session had already been started - ignoring session_start() in /.../temp.php on line 6
0 голосов
/ 11 февраля 2012

Это вызовет ошибку (сессия уже началась).

Но если вы проигнорируете ошибку, она будет идемпотентной.

В PHP 5.4 мы получим: http://nl3.php.net/manual/en/function.session-status.php

0 голосов
/ 11 февраля 2012

Нет, session_start не идемпотент, у него есть зависимости в состоянии языка во время выполнения.

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

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

Кроме того, важно отметить, что результат этой функции в соответствии с $_SESSION остается определенным связанным хранилищем, именем сеанса и идентификатором сеанса.

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