2012-06-12 7 views
1

У меня есть 3 .php файлы:переменная сеанса теряется между страницами

index.php

<?php 
session_start(); 

if (isset($_SESSION['comp_id'])) 
{ 
    require_once 'scan_albums.php'; 
} 
else 
{ 
    require_once 'login.php'; 
} 

echo "SESSION['comp_id']=" .$_SESSION['comp_id']; 
?> 

scan_ablums.php

<?php 
session_start(); 
if (!isset($_SESSION["comp_id"])) 
{ 
    header('Location: index.php'); 
} 
//... 
?> 

login.php

<?php 
session_start(); 
if (isset($_SESSION['comp_id'])) 
{ 
    header('Location: index.php'); 
} 
$_SESSION['comp_id'] = 3; 
?> 

I invoke login.php через ajax:

$.ajax(
{ 
    type: 'POST', 
    url: 'login.php', 
    data: {'login': login, 'password': hpass}, 
    success: function(data) 
    { 
    console.log("ajax: [comp_id]=" + data + "\n"); 
    window.location = "index.php"; 
    } 
}); 

После перенаправления на мой index.php $ _SESSION ['comp_id'] пуст. Что я здесь делаю неправильно? Спасибо заранее.

EDIT: Забыл упомянуть, что эти страницы находятся в приложении iframe в социальной сети. Может быть, это проблема?

EDIT: проблема, безусловно, в iframe. Сессии прекрасны на моей локальной машине. Есть идеи, как это исправить?

ответ

4

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

+0

Да, я сделал это. Все, что я получаю, это предупреждения о том, что сеанс уже запущен. Переменная все еще пуста. –

+0

'login.php' и' scan_albums.php' не имеют 'session_start()' – Mike

+0

@Mike избили меня на ~ 12 секунд! – Haroon

2

http://pt2.php.net/manual/en/function.session-write-close.php

Попробуйте вызвать session_write_close(); после того, как вы выполните «login»

Проверьте на странице session_id, чтобы узнать, все ли они равны.

Смотри также:

Когда session.use_trans_sid включен, функция session_start() регистрирует внутренний обработчик вывода для перезаписи URL.

В session_start

+0

Я обнаружил, что сеансы не хранятся, поскольку политики безопасности браузера. Браузеры просто не позволят устанавливать переменные сеанса в iframe. –

0

Проверьте с вашим хостинг-провайдера о деталях их конфигурации PHP, в частности, как он обрабатывает сессии данных.

В идеале сопоставьте свою конфигурацию php.ini с локальной (рабочей) конфигурацией. Проверьте раздел .

Смежные вопросы