Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сессия

23K
30 ноября 2011 года
rafaelkyrdan
123 / / 03.05.2011
Есть приложение основная часть которого написана на asp.net и меньшая часть написана php в будущем все будет мигрировать на php. Вопрос как организовать сессию так что бы она работала в обоих частях имею ввиду данные в сессии записанные в asp.net были доступны в php?
240
30 ноября 2011 года
aks
2.5K / / 14.07.2006
Цитата: rafaelkyrdan
Сесия


Цитата: rafaelkyrdan
сесию


Цитата: rafaelkyrdan
сесии



Мои глаза!!! O_<

49K
30 ноября 2011 года
vorobej
129 / / 17.11.2011
Простейший способ - имитировать сессию через кукис

Создаешь папку, tempses с доступом для пхп и асп. Генерируешь уникальный файл для каждого пользователя... типа "asfdasdsad123sv" - это как имя файла, так и значение в сессии. Поскольку куки будет видеть как пхп так и асп, Написать 4 функции (чтение/запись занчения) для ПХП и АСП - плевое дело... Хоть храни в формате

Ключ=Значение
Ключ=Значение
Ключ=Значение

Единственное, что права доступа к сей папки грамотно настрой... и добавь .htaccess или че там у тебя, чтобы листинг запретить для веб сервера
23K
30 ноября 2011 года
rafaelkyrdan
123 / / 03.05.2011
Спасибо за ответ.Насколько я понял
Цитата:
уникальный файл

будет храниться на жестком диске.А не замедлит ли это работу всего приложения?

49K
30 ноября 2011 года
vorobej
129 / / 17.11.2011
Нет, не замедлится, не беспокойся. Сессии в PHP по такому же принципу сделаны, один в один. Единственное, что метод хранения данных:

Запись: $data = serialize($_SESSION);
Чтение: $_SESSION = unserialize($data);

Но в АСП ты сие не прочитаешь

А вот если в АСП есть парсер Json,то вариант:


Запись: $data = json_encode($_SESSION);
Чтение: $_SESSION = json_decode($data, true);

Очень даже разумненький..

И гораздо быстрее чем через базу..


Только уборщика не забудь со временем сделать, чтобы не засорить ЖД
23K
30 ноября 2011 года
rafaelkyrdan
123 / / 03.05.2011
а как на счет подключения к этому файлу порядок чтения записи и т.д и т.п......
23K
01 декабря 2011 года
rafaelkyrdan
123 / / 03.05.2011
В продолжении этой темы: написал скрипт который управляет сессией теперь данные хранятся в базе данных.

Код:
function _open()
{
    global $_sess_db;
    if ($_sess_db = mysql_connect('127.0.0.1', 'root', '')) {
        return mysql_select_db('db_test', $_sess_db);
    }
    return FALSE;
}

function _close()
{
    global $_sess_db;
    return mysql_close($_sess_db);
}


function _read($id)
{
    global $_sess_db;

    $id = mysql_real_escape_string($id);

    $sql = "SELECT access FROM sessions WHERE id = '$id'";

    if ($result = mysql_query($sql, $_sess_db)) {
        if (mysql_num_rows($result)) {
            $record = mysql_fetch_assoc($result);

            return $record['access'];
        }
    }

    return '';
}

function _write($id)
{
    global $_sess_db;

    $access = time();

    $id = mysql_real_escape_string($id);
    $access = mysql_real_escape_string($access);

    $sql = "INSERT INTO sessions VALUES ('$id', '$access')";

    return mysql_query($sql, $_sess_db);
}

function _destroy($id)
{
    global $_sess_db;

    $id = mysql_real_escape_string($id);

    $sql = "DELETE FROM sessions WHERE id = '$id'";

    return mysql_query($sql, $_sess_db);
}

function _clean($max)
{
    global $_sess_db;
 
    $old = time() - $max;
    $old = mysql_real_escape_string($old);
 
    $sql = "DELETE FROM sessions WHERE  access < '$old'";
 
    return mysql_query($sql, $_sess_db);
}

session_set_save_handler('_open','_close','_read','_write','_destroy','_clean');
session_start();
285
01 декабря 2011 года
Romik
479 / / 24.11.2002
Использовать файл плохая идея по причине блокировок файла разными потоками/процессами. Проблема проявляется при частом обращении в рамках одной сессии.
Представленный код является решением в верном направлении (имеется ввиду использование session_set_save_handler), но не смущает ли вас, что в этой сессии вы максимум можете сохранить дату обращения к ней? в _write() нет второго параметра, который принимал бы $data

Смею предложить использовать в качестве хранилища memcache/redis вместо mysql
23K
02 декабря 2011 года
rafaelkyrdan
123 / / 03.05.2011
Цитата: Romik
но не смущает ли вас, что в этой сессии вы максимум можете сохранить дату обращения к ней? в _write() нет второго параметра, который принимал бы $data

Смею предложить использовать в качестве хранилища memcache/redis вместо mysql



Да вы правы на 100 % и про $data и про memcache. Когда найду решение данной задачи выложу код здесь.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог