Почему я не могу получить доступ к переменным сеанса из моего AJAX-называемого PHP скрипт?
У меня есть один PHP script с переменной сеанса, заданный так:
$_SESSION['VAR1'] = "test"
Теперь я использую AJAX через инициированный jQuery POST-запрос, и поэтому у меня есть script с именем ajax.php
, который имеет все необходимые функции.
И когда я пытаюсь получить доступ к моей переменной сеанса (echo $_SESSION['VAR1']
) в ajax.php, она ничего не производит.
Не работает ли сеанс из запросов AJAX?
Ответы
Ответ 1
Вам нужно сделать это на каждой странице, которая обращается к сеансу перед его доступом:
session_start();
Это означает как на странице, задающей переменную сеанса, так и на странице AJAX, которая пытается ее восстановить. Оба должны вызвать session_start()
.
Пока запрос AJAX вызывает script в том же домене (и таким образом получает доступ к файлу cookie сеанса), нет причин, по которым он не мог получить доступ к переменным сеанса. Запрос AJAX - это всего лишь еще один HTTP-запрос.
Ответ 2
Убедитесь, что имена доменов для обеих страниц (то есть контейнер AJAX и AJAX script совпадают). Вот пример:
http://mydomain.com/login.php (set session variables here)
http://mydomain.com/ajax-container.php (session variables are visible here)
http://mydomain.com/ajax-script.php (session variables are visible here)
http://www.mydomain.com/ajax-script.php (session variables are NOT visible here)
Другой:
http://www.mydomain.com/login.php (set session variables here)
http://www.mydomain.com/ajax-container.php (session variables are visible here)
http://www.mydomain.com/ajax-script.php (session variables are visible here)
http://mydomain.com/ajax-script.php (session variables are NOT visible here)
Ответ 3
Я также поймал себя на том, что у меня было одно маленькое, крошечное, труднодоступное место перед "<? php". Это привело к отправке информации и запрету запуска сеанса, поскольку уже была отправлена информация заголовка. Может быть, не для кого-то другого, но это сбило меня с толку и привело меня на эту страницу в поисках ответа.
Ответ 4
Перед вызовом session_start() убедитесь, что ни один контент не был эхом (даже без пробелов).
Чтобы быть в безопасности, поместите код в качестве первого кода любого шаблона, который вы использовали для этой страницы. Функция не будет работать, если контент отправлен в браузер.
Чтобы проверить и увидеть, где проблема, вызовите страницу как автономную, а не через AJAX и убедитесь, что она работает до AJAXing.
Ответ 5
Добавление к тому, что написал Салман А:
Если вы установите переменную сеанса в файле https://и попытаетесь получить к ней доступ с файлом http://, вы не сможете...
https://www.example.com/index.php - call session_start() and set session variable
http://ww.example.com/index_tmp.php - unable to access session variable
и наоборот...
http://www.example.com/index.php - call session_start() and set session variable
https://ww.example.com/index_tmp.php - unable to access session variable
Вместо
https://www.example.com/index.php - call session_start() and set session variable
https://ww.example.com/index_tmp.php - Able to access session variable
и
http://www.example.com/index.php - call session_start() and set session variable
http://ww.example.com/index_tmp.php - Able to access session variable
Ответ 6
Моя собственная ошибка была символом спецификации в моем файле ajax. Мне нужно было использовать переменную сеанса в ajax, вызванном php файлом. Я попытался запустить сеанс session_start(), но "не может изменять информацию заголовка". Я удалил символ спецификации и код работает очень хорошо.
Ответ 7
В jQuery или JavaScript вы можете получить значение сеанса следующим образом:
var StepIndexval = '<%= Session["StepIndex"].ToString() %>';
alert(StepIndexval);