2014-10-10 3 views
0

У меня есть файл PHP (approvals.php), который выполняется только при вызове AJAX. Он имеет запрос postgresql, который выполняет поиск в таблице и использует идентификатор клиента, который устанавливается как переменная сеанса. Проблема в том, что я не могу получить доступ к этой переменной сеанса в этом файле. Мой запрос как:PHP Session Variable недоступна

$query = "SELECT merchant_id FROM ndovu_merchant_users WHERE customer_id={$_SESSION['customer_id']}"; 
$result = pg_query($query); 

Я попытался повторить переменный сеанс $_SESSION['customer_id'], но ничего. Однако при передаче фиксированного значения в запрос он возвращает результат.

+1

Где вы назначаете значение сеансу? – Naruto

+2

вы добавили 'session_start();' в верхней части вашего файла approvals.php? Пожалуйста, покажите нам больше кода вашего файла. – chresse

+0

Да, но я все еще не работаю. Переменные сеанса были установлены в другом файле. – Denny

ответ

0

Вы должны разместить session_start(); над секцией кода, в которой вы ее используете; верхняя часть страницы, как правило, является лучшим местом для ее размещения.

Также следует отметить; у вас есть то, что потенциально может быть большим недостатком безопасности, путем передачи в неэкранированных данных.

Вы должны изучить, если возможно, готовые заявления; или, по крайней мере, избежать ваших входов.

+0

Зачем бежать? Мы знаем, что 'id' всегда численный, * правый *? 'ctype_digit()' или регулярное выражение соответствует '^ [0-9] + $'. –

+0

Это будет прекрасно работать да. На мой взгляд, приведение типов или проверка типа - это форма выхода в любом случае. Но я все еще придерживаюсь того, что я говорил о подготовленных заявлениях; использование их было бы лучше всего. Я считаю, что MySQL (и другие базы данных, скорее всего, тоже), кэшированные отчеты лучше, чем обычные запросы – Bowersbros

0

Пользовательский сеанс не подключен, когда сценарий вызывается с помощью запроса ajax. Токен сеанса, который требуется для получения данных сеанса, хранится на стороне клиента (пользователя) внутри файла cookie сеанса. Здесь вы можете прочитать здесь https://stackoverflow.com/a/1535712/3922692

Просто передайте идентификатор пользователя с помощью GET или POST в запросе ajax.

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

1

В вашем случае я бы проверил, установлен ли сеанс в первую очередь.

//this should be put at the header of the page 
session_start(); 

    if(isset($_SESSION['customer_id']) && !empty($_SESSION['customer_id'])){ 
     echo $_SESSION['customer_id']; 
    }else{ 
     echo 'session is not set'; 
    } 
Смежные вопросы