2012-06-19 3 views
1

Хорошо, это начинает раздражать меня, поскольку это довольно просто и работает в другом месте, но в этой текущей задаче это не так, поэтому я иду!Запись на PHP-сессию Переменная от Ajax

Существует основная страница, которая полагается либо на заданную или не отображаемую информацию о сеансовой переменной. Предположим, что эта страница находится здесь: http://dev.example.com/some_page.php например.

if (isset($_SESSION["some_var"])) { /* it's set so do whatever */ } 
else { /* not set so do whatever else.. */ } 

Существует страница с Ajax вызвано JQuery $ .ajax() для вызова и установить этот переменный сеанс обнулить изменить действие главной страницы, скажем, он находится здесь: http://dev.example.com/ajax/some_ajax_page.php

Это код выглядит так:

<?php 
    if (!isset($_SESSION)) session_start(); 
    $_SESSION["some_var"] = null; 

Когда главная страница перезагружается после Аякса запускается, сессия вар «some_var» цела, но если он повторил после того, как «нулевой» на странице АЯКС то установлено значение «null».

В принципе, он, похоже, не пишет на глобальную сессию, только на локальный путь.

Имеет ли это смысл?

Любая помощь пожалуйста? Кроме того, если вы хотите получить больше разъяснений с помощью чего-нибудь, дайте мне знать!

+4

$ _SESSION является суперглобальным и всегда «установлен». –

+1

использовать '$ _SESSION [" some_var "]! = ''' А не 'isset' –

+0

вы также вызываете session_start() на своей главной странице? –

ответ

0

Оказывается, приложение, над которым я работал, было его собственным session_handler, и если он не был включен перед запросом данных сеанса, он всегда был недействительным, хотя это был тот же session_id.

+0

Можете ли вы подробнее рассказать о том, что было сделано с session_handler? Как вы исправили свою проблему? Было ли что-то еще выполнено 'session_start()'? – Scott

+0

@Scott, должно быть только 1 'session_start()'. Я использовал базу данных MySQL для хранения значений вместо обычного хранилища файлов. –

1

Избавиться от проверки на сеанс. Если это единственный файл своего призвания только сделать это:

<?php 
    session_start(); 
    $_SESSION["some_var"] = null; 

Кроме того, вы используете структуру, которая автоматически восстанавливает идентификатор сеанса при каждом запросе? Если это так, у вас могут возникнуть проблемы.

Если у вас есть машина-разработчик, и для этого разрешены, вы можете вручную удалить все сеансы в каталоге/var/lib/php/session /. При использовании вашего сайта должен быть создан только один файл сеанса. Вы также можете проверить этот файл, чтобы узнать, что пишет и когда.

+0

Если я не делаю проверку на сеанс, она стонает об этом в журналах сервера ... это единственная причина, по которой она добавлена. –

+0

@ hsmoore.com Если вы проверяете несколько страниц, то идентификатор сеанса один и тот же? – Ray

+0

Я проверил это, выполнив echo session_id(); и я получаю одинаковое значение для обеих страниц, хотя данные не совпадают. –

0

Кажется, что вы используете разные сеансы сеанса. Один для вызова AJAX и другой для обычных вызовов страниц. Это может произойти, если вы не инициируете оба вызова одним и тем же способом (или с использованием того же стартового кода, который инициализирует сеансы). Обязательно используйте session_start() для обоих вызовов с использованием того же session_id.

// try in both calls 
session_start(); 
echo session_id(); // must return the same id in both calls 
+0

Я эхо и session_id(), и они то же самое. –

1

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

http://us2.php.net/manual/en/function.session-start.php

Для вашего кода, вы хотите, чтобы убедиться, что называть session_start() в начале любой страницы, в которой вы хотите сохранить или сеанс доступа к переменным. Так что ваша страница выше, может выглядеть следующим образом:

<?php 

session_start(); 

$_SESSION['myvar'] = 'some value'; 

Затем на другой странице вы можете попытаться получить доступ к этому значению:

<?php 

session_start(); 

if ($_SESSION['myvar'] == 'some value') { 

    // do something 

} 

Это должно работать нормально.

0

Почему вы не используете unset? Это правильный способ сделать это.

+0

Мне не нравится использовать unset() для переменных сеанса, поскольку он на самом деле непредсказуем и не всегда работает, поэтому я решил установить неиспользуемые в null вместо этих дней. –

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