есть короткий трюк кода, чтобы проверить, начался сеанс, а если нет, то загрузите его? В настоящее время я получаю сообщение об ошибке «session уже начал ...», если я включил сеанс, независимо от проверки.Загрузить session_start() только в том случае, если сеанс не существует?
ответ
isset
, как правило, правильный способ проверить, если предопределенные переменные в настоящее время определены:
Если вы используете версию PHP до 5,4,
обычно вы можете уйти с и его заманчивым просто выполните код ниже, но имейте в виду, что если по какой-либо причине сеансы отключены, session_start() все равно будет вызван, что может привести к ошибкам и ненужной отладке, поскольку массив $ _SESSION не может быть создан.
if(!isset($_SESSION)){session_start();}
, если вы хотите, чтобы учесть для проверки, чтобы увидеть, если занятия будут отключены по какой-то причине, вы можете подавить сообщение об ошибке, установите переменный сеанс тест, а затем проверить, она была установлена. Если это не так, вы можете запрограммировать реакцию на сеансы с отключенным доступом. Вы захотите сделать все это в начале сценария или рядом с ним. Так как пример (работает по-разному в зависимости от настроек обработки ошибок):
if(!isset($_SESSION)){session_start();}
$_SESSION['valid'] = 'valid';
if($_SESSION['valid'] != 'valid')
{
//handle disabled sessions
}
Однако, если вы используете PHP версии 5.4 или выше,
Вы можете использовать функцию session_status(), лучший вариант, как он учитывает, что сеансы отключены, и проверяет, существует ли сеанс.
if (session_status() === PHP_SESSION_NONE){session_start();}
ВНИМАНИЕ, что PHP_SESSION_NONE постоянный набор на PHP и поэтому не должны быть обернуты в кавычки. Он оценивает целое число 1, но поскольку его константа, специально предназначенная для устранения потребности в магических числах, лучше всего проверять на константу.
Многие люди просто используют @session_start()
, чтобы предупредить, что сеанс уже запущен. В качестве альтернативы, как правило:
if (session_status() === PHP_SESSION_NONE) session_start();
if (session_id() === "") { session_start(); }
попробовать это условие
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
} }else{
if (session_status() == PHP_SESSION_NONE) {
session_start();
} }
Если вы хотите, чтобы избежать этой ошибки, используйте @ перед функцией Например:
@session_start();
Привет, добро пожаловать в SO. Не могли бы вы отредактировать свой пост, чтобы объяснить, что делает ваш код и как он решает проблему OP? Кодовые ответы не поощряются и подлежат удалению. –
Checking для существующей сессии до начала нового:
// # if phpversion() is >= 5.4
if(phpversion() >= 5.4) {
// # check session_status() function for value 'PHP_SESSION_NONE'
if(session_status() === PHP_SESSION_NONE) {
session_start();
}
} else { // # maintain backwards compat. with PHP versions older than 5.4
// # if $_SESSION object if NOT set, start a new session!
if(!isset($_SESSION)) {
session_start();
}
}
- 1. Загрузить словарь ресурсов только в том случае, если существует файл
- 2. DBMS_SCHEDULER.DROP_JOB только в том случае, если существует
- 3. HttpHandler пожар только в том случае, если файл не существует
- 4. DynamoDBMapper сохраняет только в том случае, если объект не существует
- 5. htaccess переписать только в том случае, если файл не существует
- 6. Вставьте только в том случае, если значение не существует
- 7. Вставить только в том случае, если он не существует
- 8. Вставьте строку только в том случае, если строка не существует
- 9. SBT Публиковать только в том случае, если версия не существует
- 10. Вставить данные только в том случае, если запись не существует
- 11. Исследуемый шаблон только в том случае, если файл не существует
- 12. Вставить только в том случае, если строка не существует
- 13. Добавить столбец в таблицу в нескольких базах данных только в том случае, если таблица существует, и если таблица существует только в том случае, если столбец не существует
- 14. PHP - substr() только в том случае, если существует определенный символ?
- 15. Elasticsearch Bulk Index - Обновление только в том случае, если существует
- 16. Ajax визуализировать только в том случае, если существует элемент
- 17. Ansible включить задачу только в том случае, если файл существует
- 18. mysql UPDATE только в том случае, если существует NO INSERT
- 19. Устанавливать только в том случае, если существует внешний файл
- 20. select Postgres перечисление только в том случае, если оно существует
- 21. Вызов метода только в том случае, если он существует
- 22. Как показать аватару только в том случае, если он существует?
- 23. Показать div только в том случае, если существует mySQL-информация
- 24. Рельсы: link_to только в том случае, если существует маршрут
- 25. Как сохранить панорамирование только в том случае, если идентификатор существует?
- 26. Python: Определить функцию только в том случае, если существует пакет
- 27. DynamoDB: updateItem только в том случае, если он уже существует
- 28. JQ создать поле только в том случае, если оно существует
- 29. Jsoup Получить элемент только в том случае, если он существует
- 30. Как пропустить фразу только в том случае, если она существует
спасибо за упоминание решения для php <5.4 – Houston
@nick хорошо, я бы сказал, что вы либо нашли ошибку в 5.4.16, либо, скорее всего, создали странную конфигурацию php/server. В любом случае это хорошо, чтобы скопировать их, возможно, крайние случаи: D – Rooster