Значение php сессий стирается после запроса ajax - PullRequest
3 голосов
/ 22 июля 2011

У меня есть скрипт, в котором я устанавливаю сеансы uid и электронной почты, когда пользователь входит в систему.

в 2 переменных:

$_SESSION["uid"] = $user_id;//1,2,3 etc..
$_SESSION["email"] = 'my@email.com';

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

Я искал весь свой сценарий и не смог найти ни одного

$_SESSION["email"] = '';

после выполнения запроса ajax или где бы то ни было.

какие-нибудь подсказки?

EDIT: var_dump of _SESSION:

array(2) { ["email"]=> &string(0) "" ["uid"]=> &string(11) "91283921834" }

РЕШЕНИЕ: Мой хост показал 5.2.17 как версию php по умолчанию, поэтому мне пришлось позвонить

AddType application/x-httpd-php53 .php

в моем файле .htaccess, чтобы он видел 5.3.5 как живую версию php, которая удалила ссылки и теперь работает нормально.

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

Вы где-то назначаете переменную по ссылке на ваш сеанс, вы можете увидеть это с символом & в вашем var_dump:

array(2) { ["email"]=> &string(0) "" ["uid"]=> &string(11) "91283921834" }
#                     ^^^                     ^^^

Ссылка в PHP означает, что в вашем случае $_SESSION['email'] стал псевдонимом для некоторой другой переменной.Если эта другая переменная изменится, $_SESSION['email'] изменится, так как это только псевдоним.

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

Это только предположение, но поиск по &$email или просто $email.Ищите функции, которые принимают параметры по ссылке (&$parameter), возвращают по ссылке или вызываются с параметрами по ссылке.

2 голосов
/ 22 июля 2011

Вы должны вызвать session_start() вверху каждого скрипта, чтобы создать сеанс

.

Поместите его сразу после тега <?php

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

Когда я впервые начал работать с php-сессиями, подобные вещи сводили меня с ума, пока я не освоился с ними.

Есть пара вещей, на которые стоит обратить внимание, главное, что ваш сессионный cookieключ, потому что он сохраняется столько, сколько вы хотите.

Даже если вы запускаете сеанс, а cookie-файл сеанса устанавливается на одной странице, каждая новая страница, которую вы отправляете в браузер, все равно должна проверять,сеанс был установлен.

Как вы упомянули, что вы используете ajax, я предполагаю, что одна страница (например, форма) обрабатывается через ajax, и ответ либо возвращается на ту же страницу, либо перенаправляется.Где вы устанавливаете свою сессию?это в скрипте обработки Ajax - или на оригинальной странице формы?

Если вы перенаправляете после успешного вызова AJAX, подумайте о том, что происходит, когда ваш пользователь нажимает кнопку «назад».Вы хотите, чтобы отображались те же данные, или же форма должна будет выглядеть как новая?

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

МОЙ ТАК вопрос о сессиях

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