Undefined variable: _SESSION при отправке переменных через сообщение через триггер JavaScript
В моем файле index.php я вызываю session_start()
и устанавливаю пару переменных сеанса. Во втором PHP файле я хотел бы получить доступ к этим переменным сеанса.
Дело в том, что этот PHP файл является чисто бэкэнд script и отправляется после запуска функции JavaScript. Когда вызов POST пытается вызвать script во втором PHP файле, журнал ошибок сообщает, что:
_SESSION
является переменной undefined.
Я пробовал вызывать start_session()
и session_regenerate_id()
в верхней части второго PHP файла, но проблема сохранилась.
Я предполагаю, что происходит, потому что в POST этот PHP файл находится в своем собственном сеансе, так как я все еще способен сделать это $_COOKIE[ini_get('session.name')]
.
Информация, которую я пытаюсь передать во второй файл PHP, не является чем-то, что нужно защитить, но было бы неплохо узнать в будущем, как это сделать: вызвать файл PHP через POST и все еще иметь мои переменные сеанса.
Ответы
Ответ 1
Нет ничего особенного в запросах и сеансах POST.
Вам просто нужно вызвать session_start
в верхней части каждого <<забавного > файла запроса, с которым вы хотите использовать сеансы, в том, что он.
Попробуйте еще раз с этим, он должен работать.
Ответ 2
session_start();
является ответом на большинство подобных тем. я боролся с этой проблемой, и я решил свою проблему с этим кодом.
if (version_compare(PHP_VERSION, '5.4.0', '<')) {
if(session_id() == '') {session_start();}
} else {
if (session_status() == PHP_SESSION_NONE) {session_start();}
}
Ответ 3
вы должны включить
<?php session_start();?>
в начале вашего документа, это запустит SESSION ENGINE и позволит вам установить переменные сеанса (ie. $_SESSION['var1'], $_SESSION['var2'], etc)
Если вы хотите получить значения из $_POST, вы можете связать их вместе:
$_SESSION['var1'] = $_POST['answer1']
Ответ 4
Я столкнулся с этой проблемой, и, попробовав много вещей, я включил session_start() во второй script, и он сработал.
Ответ 5
Недавно я столкнулся с той же проблемой. Я не смог получить доступ к содержимому переменной $_SESSION.
1) Это было связано с попыткой доступа к переменной $_SESSION до объявления session_start();
. В моем собственном случае я уже начал сеанс в файле header.php. Но я обращался к переменной $_SESSION перед оператором include. Пример
<?php
$username = $_SESSION['username'];
//do some logical operation!!!
?>
<?php include("header.php");?>
вместо того, чтобы делать что-то вроде этого
<?php include("header.php");?>
<?php
$username = $_SESSION['username'];
//do some logical operation!!!
?>
2) Еще одна вещь, которая может вызвать эту проблему, возможно, не запускает сеанс в верхней части всех файлов, которым может потребоваться доступ к переменной $_SESSION, используя
session_start();
Надеюсь, это поможет любому, кто наткнулся на ту же проблему. Хотя это происходит в поздний час.
Ответ 6
session_start() - ответ. И вот еще один способ обойти это:
<?php
if (session_id() == "")
session_start(); ?>
Это гарантирует, что новый сеанс будет запущен, только если у вас уже нет текущего сеанса. И, конечно, как говорили другие, обязательно разместите это в верхней части html.
Ответ 7
Добавьте следующий файл в файл browse.php:
error_reporting( error_reporting() & ~E_NOTICE );
if( ! ini_get('date.timezone') )
{
date_default_timezone_set('GMT');
}
if (version_compare(PHP_VERSION, '5.4.0', '<')) {
if(session_id() == '') {session_start();}
} else {
if (session_status() == PHP_SESSION_NONE) {session_start();}
}
Он будет работать нормально.