Почему я не могу получить доступ к переменным сеанса из моего сценария под названием AJAX?

У меня есть один скрипт PHP с переменной сеанса, заданный так:

$_SESSION['VAR1'] = "test" 

Теперь я использую AJAX через инициированный jQuery POST-запрос, поэтому у меня есть сценарий с именем ajax.php который имеет все необходимые функции.

И когда я пытаюсь получить доступ к своей переменной сеанса ( echo $_SESSION['VAR1'] ) в ajax.php, она ничего не производит.

Не работает ли сеанс от запросов AJAX?

Вам нужно сделать это на каждой странице, которая обращается к сеансу перед его доступом:

 session_start(); 

Это означает как на странице, задающей переменную сеанса, так и на странице AJAX, которая пытается ее восстановить. Оба требуют вызова session_start() .

Пока запрос AJAX вызывает скрипт в том же домене (и таким образом получает доступ к файлу cookie сеанса), нет причин, по которым он не мог получить доступ к переменным сеанса. Запрос AJAX в конце концов – всего лишь еще один HTTP-запрос.

Убедитесь, что имена доменов для обеих страниц (например, контейнер AJAX и сценарий AJAX одинаковы). Вот пример:

 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) 

Я также поймал себя на том, что у меня было одно маленькое, крошечное, труднодоступное место перед «<? Php». Это привело к отправке информации и запрету начать сеанс, поскольку уже была отправлена ​​информация заголовка. Может быть, и не для кого-то другого, но это подтолкнуло меня и привело на эту страницу в поисках ответа.

Перед вызовом session_start () убедитесь, что ни один контент не был эхом (даже без пробелов).
Чтобы быть в безопасности, поместите код в качестве первого кода любого шаблона, который вы использовали для этой страницы. Функция не будет работать, если контент отправлен в браузер.
Чтобы проверить и увидеть, где проблема, вызовите страницу как автономную, а не через AJAX и убедитесь, что она работает до AJAXing.

Добавление к тому, что написал Салман А:

Если вы установите переменную сеанса в файле 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 

Моя собственная ошибка была символом спецификации в моем файле ajax. Мне нужно было использовать переменную сеанса в ajax, вызванном php-файлом. Я попытался запустить сеанс session_start (), но «не может изменять информацию заголовка». Я удалил код спецификации и код очень хорошо.

В jQuery или JavaScript вы можете получить значение сеанса следующим образом:

 var StepIndexval = '<%= Session["StepIndex"].ToString() %>'; alert(StepIndexval);