Почему я не могу получить доступ к переменным сеанса из моего 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);