Передача значения из JS в PHP? @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 14 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
Konyukhov Муж.
новый человек
0
Сообщения: 166
Зарегистрирован: 10.12.06
Откуда: 89
Заголовок сообщения: Передача значения из JS в PHP?
Сообщение Добавлено: 16 Октябрь 2008, 06:45:51 
Столкнулся с такой задачей.

Имеется: движок сайта, работающий как на ajax, так и без оного

Требуется: при загрузке сайта определить, включен ли JS, и установить сессионную переменную в PHP.

Я пробую сделать следующим образом: перед загрузкой основной логики посылаю ajax запрос, и устанавливаю на сервере сессионную переменную, например, $_SESSION['ajax'] = true

Но это работать не хочет, ибо в дальнейнем PHP-коде эту переменную не видно. Я не совсем хорошо разбираюсь в механизме сессий в случае использования асинхронных запросов и не могу точно сформулировать почему это не работает, но понимаю, что вроде как и не должно работать...

Какие будут идеи? Всякими редиректами заморачиваться не хочу.

_________________
Лишь одно в моём кармане - беспонтовый пирожок
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Сообщение Добавлено: 16 Октябрь 2008, 07:13:16 
Сессия должна работать. Если разные домены (субдомены) - тогда сессия не будет работать.
Я бы проверил: не меняется ли значение session_id().

Запросы на сервер можно посылать не только XMLHttpRequest, но и скрытым IFRAME или IMG (в одну сторону).

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Konyukhov Муж.
новый человек
0
Сообщения: 166
Зарегистрирован: 10.12.06
Откуда: 89
Сообщение Добавлено: 16 Октябрь 2008, 07:35:53 
AlexShop, выражусь поточнее.

Из index.php запускается javascript, который отправляет ajax-запрос, в котором, в свою очередь, обрабатывающий PHP-скрипт устанавливает сессионную переменную. В JS приходит ответ. Если он приходит, значит, JS работает. Далее в index.php я смотрю значение той сессионной переменной. Изменений нет! Т.е. ее не видно. Я подозреваю, что не видно ее потому, что PHP-скрипт не видит сессионные переменные, которые установлены в подзапросе ajax.

id сейчас проверю... проверил. Одинаковый.

_________________
Лишь одно в моём кармане - беспонтовый пирожок
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Сообщение Добавлено: 16 Октябрь 2008, 07:51:34 
Konyukhov,

Если я правильно понимаю, то:
index.php исполнился до того когда Ajax послал запрос и установил сессию. Поэтому сессии в index.php не должно быть.

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Konyukhov Муж.
новый человек
0
Сообщения: 166
Зарегистрирован: 10.12.06
Откуда: 89
Сообщение Добавлено: 16 Октябрь 2008, 08:14:41 
AlexShop, я попробовал сделать следующим образом:

- до посыла запроса ajax я не делаю session_start() (но делал этот ранее)
- в подзапросе ajax я стартую сессию;
- дальше, в index.php я стартую сессию и вижу в ней установленную переменную.

Вроде все заработало.

Таким образом, выбранная мною схема не работала потому, что сначала сессия инициализировалась в index.php, до выполнения подзапроса; затем я "открывал" уже проинициализированную сессию в подзапросе и устанавливал в ней переменную, но PHP-код в index.php не видел переменную, установленную в подзапросе, так как механизм сессий, видимо, не перечитывает данные, а видит только те, которые установлены непосредственно в ходе выполнения скрипта.

Несколько сумбурно, но смысл, наверное, понятен.

Примененный механизм не универсален - он не позволяет передавать значения в уже открытую сессию.

_________________
Лишь одно в моём кармане - беспонтовый пирожок
Konyukhov Муж.
новый человек
0
Сообщения: 166
Зарегистрирован: 10.12.06
Откуда: 89
Сообщение Добавлено: 17 Октябрь 2008, 06:54:20 
Я прогнал. Это не работает.

_________________
Лишь одно в моём кармане - беспонтовый пирожок
Konyukhov Муж.
новый человек
0
Сообщения: 166
Зарегистрирован: 10.12.06
Откуда: 89
Сообщение Добавлено: 17 Октябрь 2008, 08:19:10 
Короче, резюмирую: во время выполнения PHP-скрипта (внутри скрипта, без перегрузок) определить, включен ли JS, нельзя.

Сессионный механизм таков, что переменные, установленные в подзапросах, не видны в основном скрипте, пока он выполняется.

Куки можно отключить (была идея устанавливать куки в подзапросе, а в основном скрипте ждать, пока не появится нужна кука, т.к. ajax-запрос выполняется не моментально).

Сохранять файл на сервере и потом ждать его появления... вариант, но не хочу. Может, сделаю, но пока поищу что-то более другое.

Вопрос остается открытым.

_________________
Лишь одно в моём кармане - беспонтовый пирожок
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 17 Октябрь 2008, 08:46:04 

Konyukhov писал(а):
Короче, резюмирую



Это не было очевидно априори? :eek:


Цитата:
в основном скрипте ждать, пока не появится нужна кука



...вижу, что и сейчас не очевидно. Я тебя огорчу: ты в принципе неверно понимаешь, как работает PHP. Ждать появления куки в уже запущенном скрипте ты будешь до морковкиного заговенья.

Итак: книжки в руки -- и читать, читать, читать.
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Сообщение Добавлено: 17 Октябрь 2008, 09:28:25 

Konyukhov писал(а):
Сессионный механизм таков, что переменные, установленные в подзапросах, не видны в основном скрипте, пока он выполняется.


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

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Konyukhov Муж.
новый человек
0
Сообщения: 166
Зарегистрирован: 10.12.06
Откуда: 89
Сообщение Добавлено: 18 Октябрь 2008, 05:18:29 
Crazy, AlexShop, да, признаюсь, некоторые аспекты работы PHP я представлял неверно и поверхностно.

Пока что остается вернуться к идее сохранения специального файла через xmlHTTPRequest и ожидании его появления.

_________________
Лишь одно в моём кармане - беспонтовый пирожок
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 18 Октябрь 2008, 09:00:33 
...либо можно записать что-то в базу.
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Сообщение Добавлено: 18 Октябрь 2008, 20:04:02 

Konyukhov писал(а):
Пока что остается вернуться к идее сохранения специального файла через xmlHTTPRequest и ожидании его появления.


А этот файл, на сервере, будут читать все пользователи (у которых JS включен и отключен)?

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Konyukhov Муж.
новый человек
0
Сообщения: 166
Зарегистрирован: 10.12.06
Откуда: 89
Сообщение Добавлено: 19 Октябрь 2008, 07:33:47 
Сделал следующим образом:

в index.php стартую сессию; если определенная сессионная переменная false, запускаю ajax-запрос, который устанавливает сессионную переменную, и по завершению запроса делаю location.reload().

Все "идеи" сохранять что-либо на сервере провалились по одной простой причине: если не работает js, то ничего и не изменится, и ждать изменений, действительно, можно долго, равно как и невозможно определить то состояние, когда ничего не случилось.

_________________
Лишь одно в моём кармане - беспонтовый пирожок
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Сообщение Добавлено: 19 Октябрь 2008, 11:25:02 

Konyukhov писал(а):
по завершению запроса делаю location.reload().


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

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 14 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100