Мне нужно избегать создания сеанса в приложении, если это не является абсолютно необходимым.
Я заметил, что вызовы xajax не работают должным образом, если сеанс не запущен: (Мой первый подход заключался в том, чтобы создать сеанс (если он не существует) в начале функции xajax, однако он не работает первый раз пользователь вызывает вызов (он работает второй раз с момента создания сеанса).
Есть ли способ справиться с этой ситуацией?
Изменить: пример кода:
function example ($parameters) { if (!isset($_COOKIE["PHPSESSID"])) { session_start(); // we create the session if it didn't exist previously } $response = new XajaxResponse(); ..... return $response; }
Моя идея – создать сеанс, когда пользователь делает вызов ajax. В этой ситуации, в первый раз, когда я вызываю функцию «example», она не работает. Во-вторых, это нормально, я думаю, потому что сессия была создана.
EDIT: Привет, я заметил проблему в chrome и explorer 🙁 Первый вызов ajax не получен (я не получаю ответа). Чем это означает, что пользователю нужно дважды щелкнуть, чтобы получить правильный ответ (со всплывающим пример)
Благодаря!
Проблема заключается в том, что вы не вызываете session_start()
если $_COOKIE['PHPSESSID']
установлен, и, следовательно, сеанс не инициализируется для текущего запроса ajax. Вы должны вызвать session_start()
для каждого скрипта, использующего сеанс, – это не только для инициализации сеанса.
function example ($parameters) { // If this function uses the session, you MUST call session_start() // Don't do it conditionally. session_start(); $response = new XajaxResponse(); ..... return $response; }
Если все ваши функции обработчика ajax используют сеанс, вы можете просто вызвать session_start()
в верхней части файла, который их содержит. Если вы не хотите, чтобы сеанс загружался до вызовов ajax, разделите их на свой собственный PHP-скрипт, в то время как вы не вызываете session_start()
в основном скрипте, который они загружают.
Для сеанса вы должны перезагрузить страницу без перезагрузки. Сеанс страницы не может создать ….. И Ajax полезен без перезагрузки всей страницы.