Форум русской поддержки Joomla!® CMS
08.12.2016, 13:59:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

СЕСИЯ при AJAX запросе к php файлу

 (Прочитано 541 раз)
0 Пользователей и 1 Гость смотрят эту тему.
avantyrist
Давно я тут
****

Репутация: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 203



« : 19.12.2015, 17:33:50 »

Добрый день. Постараюсь описать то чего планировал добиться. Но сил уже нет никаких Sad(

Сделал модуль.  Он выполняет тяжёлые запросы  БД, большая обработка массивов.
Теперь прикручиваю AJAX к нему. Идея была в том что, полученные и обработанные массивы после  загрузки страницы хранить в СЕСИИ.
Потом когда выполняю некие действия модуле, Запускать Ajax'om  некий дополнительный файл, который будет считывать из СЕСИИ массивы,  обрабатывать их и возращать результат. НО СЕСИЯ НЕ ЧИТАЕТЬСЯ доп файле Sad

в кратце структура сесии:

main.php  основной файл модуля
Код:
session_start();
$zzz = 'ЗНАЧЕНИЕ - в  модуле ето будет серилизованный массив';
$_SESSION['mySesion'] = $zzz;
echo '<br><h2> сесия из MAIN-----' .$_SESSION['mySesion']. '<h2>';

ajax.php  вспомогательный файл, к которому идёт AJAX запрос
Код:
session_start();
echo '<br><h2> сесия из AJAX -----' .$_SESSION['mySesion']. '<h2>';
выдаёт вот такую ошибку Notice: Undefined index: mySesion in

Если сделать print_r($_SESSION);  в ajax.php мы получаем array(0) {}.    Sad


Ну думаю попробую через такой метод  JFactory::getSession();
ajax.php  вспомогательный файл
Код:
define( '_JEXEC', 1 );
error_reporting(E_ALL & ~E_NOTICE);

if ( file_exists( __DIR__ . '/defines.php' ) ) {
    include_once __DIR__ . '/defines.php';
}
if ( !defined( '_JDEFINES' ) ) {
    define( 'JPATH_BASE', __DIR__ . '/../../' );
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';

echo '<h1>AJAX ПАШЕТ ! </h1>';

$session = JFactory::getSession();
$session->set('mySesion',  'значение');
echo'<pre>';
print_r ($session);
 echo'</pre>';

а в переменной сесии содержиться Фигня Sad
Показать текстовый блок


Каким образом можно достучаться AJAX запросом, к созданной сесии в другом файле  ?   Помогите пожалуйста  тут опыт надо,  инет перековырял сил нет Sad(
Записан
al-teen
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2460



« Ответ #1 : 19.12.2015, 19:10:06 »

Вы немного не те технологии используете для решения этой задачи. Не нужно хранить это в php сессии. Есть localStorage. Или IndexedDB. Это лучше подходит для решения подобных задач. Вместо неведомого AJAX можно использовать Worker.
Записан
avantyrist
Давно я тут
****

Репутация: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 203



« Ответ #2 : 19.12.2015, 19:19:49 »

Нащупал методом тыка из других модулей

$mainframe = JFactory::getApplication('site');   //  БЕЗ ЕТОГО СЕСИИ НЕ БУДУТ РАБОТАТЬ !

Очень прошу обьясните почему сраза начало всё работать ?? Sadя с самого утра себе мозг ломал.....    Что происходит при запуске метода getApplication('site')

al-teen  Спасибо Вам  погуглю-почитаю, я как понял ето более менее новые технологии...
  А почему сесии в моём случае не подходят ? Sad
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #3 : 19.12.2015, 23:22:00 »

Все просто сессии php, сессии Joomla админ интерфейса и сессии Joomla на фронте это вообще разные сессии. Поскольку вы плаваете еще во многих вопросах, то советы что вам выше дали вам только во вред будут. Я так думаю что сначало надо разобратся с нативными инструментами а потом уже пробовать всякие модные фронтенд фичи, тем более что они только в современных браузерах работают.
Записан
avantyrist
Давно я тут
****

Репутация: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 203



« Ответ #4 : 20.12.2015, 00:25:52 »

Согласен с Вами.  Я не то что "плаваю"  а просто ТОНУ

я не могу понять как начать гребсти  Sad(
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3591


« Ответ #5 : 20.12.2015, 00:51:07 »

я не могу понять как начать гребсти  Sad(
Увы, только самому читать, за вас никто это не сделает. Начать с ваш_сайт/index.php.
Записан
al-teen
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2460



« Ответ #6 : 20.12.2015, 01:07:51 »

Тут есть ответ. Дело в производительности. php сессия завершается, когда пользователь уходит с сайта. Можно запоминать сессию в куки и восстанавливать ее. Это все на php. Но Вам ведь нужно что-то там через AJAX делать, верно? Это среда js, из local strorage для js данные получать удобнее. И есть еще такое понятие, как работа сайта при обрыве сети, которую php session никак не сможет обеспечить, в отличии от ls. И это не настолько новые технологии, как может показаться вначале.

Цитировать
тем более что они только в современных браузерах работают.
Да ладно? Вообще, в почти 2016м году, тащить некробраузеры является моветоном. Это невыгодно с финансовой точки зрения. Эти браузеры не поддерживают даже сами создатели этих браузеров. Пора избавляться от стереотипов. Освоить localStorage ничуть не сложнее, нежели освоить php session.
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3591


« Ответ #7 : 20.12.2015, 01:32:01 »

Код
print_r ($session->get('mySesion'));
Так вы получите значение ранее сохраненной в сессии переменной. Но все равно читайте код, как я советовал выше, тогда не придется задавать такие вопросы.
[offtop]
И пишите "сессия" вместо "сесия", "это" вместо "ето".
[/offtop]
Записан
avantyrist
Давно я тут
****

Репутация: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 203



« Ответ #8 : 20.12.2015, 03:30:03 »

у меня кнопки "э" "в" "бекспейс" "закр. скобка"   на ноутбуке перестали отрабатывать
Я за неделю и так напсиховался с ними Sad

print_r ($session->get('mySesion'));   знаю

но print_r ($session);

какой то ОБРЕЗАННЫЙ:
Показать текстовый блок

Там нет mySesion
Записан
SmokerMan
Профи
********

Репутация: +694/-25
Online Online

Пол: Мужской
Сообщений: 5225



« Ответ #9 : 20.12.2015, 03:50:31 »

используйте глобальный массив $_SESSION, без Joomla
а так в общем в сессии не очень рекомендуется хранить большой объем данных
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +121/-3
Offline Offline

Пол: Мужской
Сообщений: 1463


« Ответ #10 : 20.12.2015, 04:16:09 »

В дополнение к вышесказанному: можно создать в таблице #__session столбец и хранить сериализованные массивы там. Вам же именно массивы нужно хранить? Тогда json_encode/decode. Хотя я не знаю, что именно вам нужно сделать, может есть решение проще.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #11 : 20.12.2015, 08:43:27 »

используйте глобальный массив $_SESSION, без Joomla
а так в общем в сессии не очень рекомендуется хранить большой объем данных

Интересно почему? Вроде сессии то создавались изначально чтобы хранить большие объемы данных в отличии от кук у которых ограничение по объему.Тем более что сессии Joomla позволяют хранить данные в БД, в файлах и даже в памяти.
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3591


« Ответ #12 : 20.12.2015, 13:11:40 »

print_r ($session->get('mySesion'));   знаю
но print_r ($session);
какой то ОБРЕЗАННЫЙ:
Если вы знаете, то у вас не должно быть проблем с получением данных. И если бы вы посмотрели класс JSession, то вы бы узнали, что объект $session содержит методы присваивать и получать нужные вам данные, но не их самих.
Записан
avantyrist
Давно я тут
****

Репутация: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 203



« Ответ #13 : 20.12.2015, 14:26:15 »

Блин я накасячил с классом JSession.
В основном файле СЕСИЮ записывал в глобальный массив $_SESSION. а в загруженном AJAX файле вызывал сесию с помощью JSession,

Ето получается, я разные сесии крутил ? Azn)  Блин вчера убил Уйму времени на ето Sad  чтение инфы и т.д.

глобальный массив $_SESSION в подгружаемом AJAX файле,   не доступен без:
$mainframe = JFactory::getApplication('site');   //  БЕЗ ЕТОГО $_SESSION НЕ БУДУТ РАБОТАТЬ !

И почему так? Для меня тоже загадка.

-------------------------------------------
Прошу прощения за созданную тему не в том Разделе
« Последнее редактирование: 20.12.2015, 14:54:12 от avantyrist » Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #14 : 20.12.2015, 15:13:13 »

А вы посмотрите конструктор JapplicationCMS класса и все станет ясно. Он загружает сессию при инициализации. Читайте исходники и не будет вопросов. $mainframe устаревшая глобальная переменная, которая юзалась в допотопные времена в линейке 1.x. Сейчас она не нужна
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3591


« Ответ #15 : 20.12.2015, 15:13:43 »

Да все записывается в $_SESSION. И потом, $_SESSION и JSession - это инструменты для работы с сессией, а не сама сессия.
$mainframe = JFactory::getApplication('site');   //  БЕЗ ЕТОГО $_SESSION НЕ БУДУТ РАБОТАТЬ !
И почему так? Для меня тоже загадка.
Вы хотите, чтобы другие делали работу за вас? Почему не почитали хотя бы код index.php?
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet