За последние 24 часа нас посетили 17844 программиста и 1716 роботов. Сейчас ищут 935 программистов ...

Передача объектов через сессии

Тема в разделе "Прочие вопросы по PHP", создана пользователем Kaner, 1 дек 2011.

  1. Kaner

    Kaner Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    58
    Симпатии:
    0
    Несколько вопросов:
    1)возможна ли передача объектов через сессии?
    2)Если да,то будет ли передана сессия,если я по нажатию клавиши использую метод ajax'а POST.
     
  2. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Передача объектов через сессию невозможна. Передавать можно только строки.

    Как вариант можно сериализовать объект (serialize), положить его в сессию. Чтобы получить объект потребуется unserialize
    Но, используя этот метод скорее получите уменьшение производительности.

    http://ru.php.net/serialize
     
  3. Kaner

    Kaner Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    58
    Симпатии:
    0
    Беда...просто проблема вот в чем:
    использую класс WebICQPro, для написания онлайн-консультанта,надо чтобы все сообщения в аську шли и организовывался живой диалог..

    предположим на странице:eek:nline-cons.php

    я логинюсь в аську и слушаю сообщения...есть форма(textarea и submit) на этой же странице, нужно чтобы по нажатию сообщение из текстэрии передавалось в аську оператора, а обращение идет к другому файлу, но чтобы при помощи класса отправить туда сообщение надо сначала опять подключаться к аське...то есть создавать новый экземпляр, логиниться а уж потом отсылать...
     
  4. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Ну тогда вам нужен демон, возможно подойдёт реализации на php

    Демон будет висеть в памяти, при создании подключаться к аське и слушать какой-либо socket.
    После сабмита сообщения вы, в php-скрипте будете подключаться к своему демону, отправлять сообщение и отключаться. Демон же будет постоянно соединён с сервером ICQ.

    Возможно, имеет смысл воспользоваться другими решениями, например, для чата вполне подходит node.js + io.socket
    http://habrahabr.ru/blogs/nodejs/127525/

    В любом случае, сессии здесь бессильны
     
  5. Psor

    Psor Активный пользователь

    С нами с:
    1 дек 2011
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Москва
    Как вариант - сообщения спулятся во временный файл, откуда по крону скрипт их разбирает каждую каждую секунду и отправляют по назначению
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Акела промахнулся!
    PHP:
    1. <?
    2. $_SESSION['o']->count++;
    3. var_dump($_SESSION);
    $_SESSION работает как обычный массив. Но при завершении работы скрипта он сериализуется (со всем содержимым, естественно), и восстанавливается функцией session_start().
    Другое дело, что объекты встроенных в php классов нельзя сериализовывать, но про них речь не идет.
    http://phpfaq.ru/session
     
  7. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    В общем, имел ввиду, что мы получаем строковое представление переменной или объекта.

    Но функционала сессий недостаточно для поставленной задачи, [vs], вы совершенно не о том говорите.

    Psor
    Хороший вариант, а если его объединить со стандартными потоками ввода / вывода, то можно убрать cron и "слушать" файл, постепенно отправляя файл. Но это, опять-таки, уже будет демон.
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Ага, задачу я и не читал =)
    Тогда тут затык в том, что в сессии нельзя сохранять ресурсы. Как вариант, можно попробовать в классе вместо fsockopen использовать pfsockopen - система будет сохранять соединение и после завершения работы скрипта, и оно будет использоваться при следующем запуске. Можно заменить функцию и посмотреть, что будет.