Питання по сесіям PHP (не працюють у Joomla), PHPClub - клуб розробників PHP
Питання по сесіям PHP (не працюють у Joomla)
Варто Joomla (Версія 1.5.17) та Joomla Mod PHP - з його допомогою можна створювати свої модулі з php кодом. Виникла необхідність використовувати сесії - є два скрипти (модулі), в одному в масив $_SESSION завантажуються змінні, у другому читаються та використовуються. Ось простий код (наприклад): Перший файл: Код
Якщо я ці два коди пишу у двох різних скриптах і запускаю в PHPed, то все працює. Якщо я запускаю це все в Joomla, $_SESSION порожній. Підкажіть, у чому може бути проблема, будь ласка.
Dark Side of the Moon.
Хм. key та value це що? Тобто, наприклад, я хочу на одній сторінці помістити в суперглобальний масив число $temp. Я пишу так:
А якщо хочу прочитати з масиву число, то:
Правильно я зрозумів?
unserializer
Dark Side of the Moon.
Велике дякую! Я зрозумів. І ще маленьке питання. Наскільки складними можуть бути типи даних, що зберігаються в цьому суперглобальному масиві? $bots_replics[0]->tags[2]->sentence //sentence - string. Щось на кшталт масиву масивів із рядків. Таке можна? А то якісь неполадки - при збереженні в сесію $6ss_replics не порожня. Тобто. я спокійно перебираю масиви та виводжу sentence на екран.
А після передачі відбувається щось не те. Коли я читаю із сесії – так, як ви показали. Розмір масиву $bots_replics залишається таким самим, як і був. Наче він не порожній. А все sentence Чомусь виявляються порожніми.
> $session =& JFactory::getSession(); Наскільки я пам'ятаю, об'єкт завжди передається за посиланням.
Насправді дуже дивна помилка. Коли я писав те саме на PHPed, використовуючи сесії,все нормально передавалося. Тепер, коли передаю через сесії Joomla, відбувається незрозуміла помилка. Розмір масиву той самий, але він порожній. при зверненні до sentence виводиться повідомлення, що рядок порожній. Виводиться не зрозумій що.
Array ( [0] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => group_of_replics [tags] => Array ( [0] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class] ------t-- --t-------- [words_of_sentence] => Array ( [0] => --------t-- [1] => --t-------- ) [emotion] => neutral [said] => false ) [1] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => PC_replic [sentence] => привіт робот [words_of_sentence] => Array ( [0] => привіт [1] => робот ) [emotion] =>
Ось, докладніше. Коди розташовані у двох модулях. Перший модуль. Все працює. Завантажую для простоти вручну. Все виводиться. Bots_replics не порожній. Можна запустити.
bots_replics[0]->tags=",$bots_replics[0]->tags[0]->sentence; і в першому, і в другому випадку однаковий, але тільки в другому нічого не виводиться.
Більше того, я зараз поекспериментував, будь-який мій, користувальницький тип даних, відмовляється нормально передаватися. А в PHPed все працювало. Дивлюся інтернет, а там все, що пов'язано з сесіями - це ідіотські питання про те, як продовжити адмінську сесію в joomla. І все.
Проблема, як я зрозумів, у тому, що після серіалізації це вже не об'єкт класу bots_replics, а класу __PHP_Incomplete_Class і, відповідно, методи/дані bots_replics не доступні
Товариші, я звичайно знайшов робітничо-селянське рішення - класу написати методи завантаження/вивантаження даних з/в сесію. Цебуде складно і завантажить програму зайвими діями.
Але. У PHPed все працювало! І в сесіях зберігалися всі мої об'єкти! Невже Joomla ущербна?
Dark Side of the Moon.
Dark Side of the Moon.
просто кулібін
john.brown, ясно, але в Joomla сесії стартують автоматично, так що оголосити класи до їх початку напевно не вийде.
LONGMAN, дякую. Завдання спочатку було таке (з ++): Пишеться чатбот типу A.L.I.C.E. http://alice.pandorabots.com/ Спочатку завантажується база тегів та відповідей на них. Загальний механізм немає сенсу пояснювати. Там багато чого, але не суть. Після завантаження циклічно приймаються репліки користувача, аналізуються, після чого видається відповідь. На с++ це все просто. На PHP довелося переписати, щоб вивести робота в мережу, для взаємодії з людьми/навчання.
Проблема ось у чому: на php неможливо організувати циклічний прийом даних. сторінка постійно оновлюватиметься, база теж, відповідно, бот втрачатиме пам'ять. Тому я розділив його на два модулі. У першому все завантажується у сесію, у другому використовується/редагується. І знову записується до сесії. Таким чином, пам'ять робота повинна була зберігатися. По ідеї. Але, мабуть, не доля. (6) Ось і все). Якщо зацікавилися, можу трохи докладніше розповісти.
просто кулібін
DiGriZНу, якщо дуже треба, то ніхто не заважає вчинити не кошерно - у файлі index.php першим рядком прописати require_once('path/to/Bot.php') Але це, звичайно, якщо не передбачається це все потім розповсюджувати як плагін джумли.
Але чесно, не зовсім зрозумів, чим сесія краще тієї ж бд, наприклад. Ну, або збереження серіалізованого об'єкта у файл.
Dark Side of the Moon.
Автор оригіналу: john.brownDiGriZНу, якщо дуже треба, то ніхто не заважає вчинити не кошерно - у файлі index.php першим рядком прописати require_once('path/to/Bot.php') Але це, Звичайно, якщо не передбачається це все потім поширювати як плагін джумли.
Але чесно, не зовсім зрозумів, чим сесія краще тієї ж бд, наприклад. Ну, або збереження серіалізованого об'єкта у файл.