2009-10-31 1 views
0

Может ли кто-нибудь сказать мне, почему переменные $ _SESSION не переносятся на мою другую страницу PHP, вызываемую с помощью ajax.AJAX + PHP: тайм-аут сеанса

На всех страницах есть session_start();

Он работает на моей локальной машине, но когда я загрузить его на моем сервере, он не работает, и обновить его возвращает меня к экрану входа ...

EDIT:

переменные сессии сохраняются как только пользователь в

$_SESSION['user_id'] = $user_id; 
$_SESSION['username'] = $user_email; 
$_SESSION['name'] = $un; 
$_SESSION['login_times'] = $login_time; 
$_SESSION['profile_pic'] = $profile_pic; 

И когда Ajax скрипт вызывает другой PHP:

session_start(); 

$user_id = $_GET['id']; 
$newsfeed_id = $_GET['nf_id']; 
$comment = $_GET['comment']; 

$conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error()); 
mysql_select_db('main') or die(mysql_error()); 

// insert new comment 

$query = "INSERT INTO newsfeed_comments ". 
"VALUES ('', '{$_SESSION['user_id']}', '{$comment}', '{$newsfeed_id}')"; 

    mysql_query($query) or die(mysql_error()); 

Но в тексте ответа ничего не возвращается, а значения $ _SESSION ['username'] были отменены, и я перенаправляюсь обратно к логину.

Кто-нибудь знает, в чем проблема?

Спасибо!

+0

Что конкретно не переносится, некоторые данные сеанса или весь сеанс? Пожалуйста, будьте более конкретными. –

+0

Вызывается 'session_start' в сценарии входа? Вы должны проследить, прошел ли идентификатор сеанса (попробуйте debug proxy Fiddler) –

+0

да, это так. session_start(); находится поверх каждой страницы. Работа сессии повсюду, они только терпят неудачу, когда я вызываю запрос AJAX – Stephen

ответ

3

Все файлы cookie (включая файлы cookie cookie) имеют параметр path, который определяет префикс, для которого cookie будет действительным. Если вы хотите, чтобы сессия была действительной для всего домена, просто установите ее в «/».

Параметры cookie сеанса можно определить с помощью session_set_cookie_params.

0

Теперь, когда я думаю об этом, это, вероятно, связано с тем, что вы сохраняете данные SESSION для определенного домена. На вашем локальном хосте вы просто localhost, но на сервере ваша сессия может быть сохранена только для определенной части вашего сайта. Передайте дополнительный параметр, чтобы указать домен.

Вы сделали session_start(), прежде чем выводить что-либо на странице входа?

Конфигурация сессии находится здесь: http://php.net/manual/en/session.configuration.php Извините, смущенно, что вы использовали файлы cookie.

Попробуйте

var_dump($_SESSION); die(); 

на каждой странице, чтобы увидеть, что у вас есть.

Также вы вызываете header() где-нибудь после сохранения в сеансе?

Это хорошая статья, отлаживающая вашу ситуацию: http://www.chipmunkninja.com/[email protected] удачи!

+0

Что вы подразумеваете под этим? данные сеанса сохраняются при выполнении сценария входа в систему, который выводит пользователя на его домашнюю страницу .. оттуда, когда я комментирую и обновляю страницу, сеанс исчезает. – Stephen

+0

как передать эти параметры? – Stephen

+0

Я не называю header() нигде .. на var_dump i get: array (0) {} – Stephen

0

Я понял, в чем проблема ... Это действительно расстраивает, но это быстро исправить.

У меня есть 3 директории

/< - корневые /Ajax < - для Ajax PHP файлов /JS < - для файлов JavaScript

Я посылала запросы Ajax/Comment.php и лечение каталог ajax/как другой домен. Поэтому я переместил все файлы Ajax php в корневой каталог и переименовал их в ajax_File.php и отредактировал javascript, и теперь он работает.

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

+0

Проверьте мой ответ, это должно помочь. –

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