Неопределенная переменная: _SESSION при отправке переменных по почте через триггер JavaScript - PullRequest
26 голосов
/ 30 августа 2011

В моем файле index.php я вызываю session_start() и устанавливаю пару переменных сеанса.Во втором файле PHP я хотел бы получить доступ к этим переменным сеанса.

Дело в том, что этот PHP-файл является чисто бэкэнд-скриптом и помещается в POST при запуске функции JavaScript.Когда вызов POST пытается вызвать выполнение сценария во втором PHP-файле, журнал ошибок сообщает, что:

_SESSION является неопределенной переменной.

Я пытался вызвать start_session() и session_regenerate_id() в верхней части второго файла PHP, но проблема не устранена.

Я предполагаю, что происходит, потому что он находится в POST, этот файл PHP находится в своем собственном сеансе, поскольку я все еще могу сделать это $_COOKIE[ini_get('session.name')].

Информация, которую я пытаюсь передать во второй файл PHP, не требует защиты, но в будущем было бы полезно узнать, как это сделать: вызвать файл PHP через POSTи все еще есть мои переменные сеанса.

Ответы [ 8 ]

54 голосов
/ 30 августа 2011

Нет ничего особенного в запросах и сеансах POST.
Вам просто нужно вызывать session_start вверху каждый файл запрос, в котором вы хотите использовать сеансы, вот и все.

Попробуй еще раз с этим, это должно сработать.

6 голосов
/ 12 мая 2014
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 голосов
/ 20 июня 2013

Я столкнулся с этой проблемой, и после многих попыток я просто включил session_start () во второй скрипт, и он заработал.

3 голосов
/ 30 августа 2011

Вы должны включить

<?php session_start();?>

в начале вашего документа, это запустит ДВИГАТЕЛЬ СЕССИИ и позволит вам установить переменные сеанса (ie. $_SESSION['var1'], $_SESSION['var2'], etc)

Если вы хотите получить значения из $ _POST, вы можете связать их вместе:

$_SESSION['var1'] = $_POST['answer1']
1 голос
/ 05 января 2016

Добавьте следующий код в файл 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();}
}   

Он будет работать нормально.

0 голосов
/ 22 июня 2018

У меня возникла эта проблема, и я попробовал другие способы и, наконец, нашел решение:

PHP чувствителен к регистру , используйте $ _SESSION вместо $ _session во всех файлах php. Конечно, это работает.Пример:

<?php
session_save_path('tmp/'); (is not optional - it is mandatory)
session_start();
echo $_SESSION["s1"]."<br/>";
echo $_SESSION["s2"]."<br/>";
?>
0 голосов
/ 02 апреля 2014

session_start () является ответом.И вот еще один способ сделать это:

<?php 
if (session_id() == "") 
    session_start();    ?>

Это обеспечит запуск нового сеанса только в том случае, если у вас еще нет текущего сеанса.И, конечно же, как уже говорили другие, обязательно поместите это в верхней части HTML.

0 голосов
/ 16 февраля 2014

Я также недавно столкнулся с той же проблемой. Мне не удалось получить доступ к содержимому переменной $ _SESSION.

1) Это было результатом попытки получить доступ к переменной $ _SESSION до объявления session_start(); В моем собственном случае я уже начал сеанс в файле header.php. Но я обращался к переменной $ _SESSION до включения оператора. Пример;

<?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();

Надеюсь, это поможет любому, кто наткнется на ту же проблему. Хотя это наступает в поздний час.

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