Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   TypoScript практикум (http://forum.typo3.ru/forumdisplay.php?f=27)
-   -   Сессия из глобальной переменной (http://forum.typo3.ru/showthread.php?t=5672)

Sergey M Nikitin 08.01.2008 15:32

Сессия из глобальной переменной [ЗАДАЧА РЕШЕНА]
 
[ЗАДАЧА РЕШЕНА]
Столкнулся с такой проблемой
Решил внедрить в свой TYPO проект SWF upload модуль.
Модуль работает по принципу AJAX, но проблема заключается в том что SWF файл не передает скрипту данные о сессии, что очень важно, есть ли какой-нибудь способ передать TYPO'е ключ сессии, чтобы он ее воспринимал на том же уровне как и ключ из COOKIE.

Что пробовал
1. Порылся в классах авторизации и наткнулся на FE_SESSION_KEY, по идеи он используется для переноса сессии с одного домена на другой но в моем случае должен был работать - не работает

2. Там же встретил проверку _GP("ftu") при передачи - не работает

3. Там же встретил проверку _GP("fe_typo_user") при передачи - не работает

4. Множество хаков - типа подмена $_COOKIE['fe_typo_user'] тоже не дало результатов, кто найдет решение, ОГРОМНОЕ СПАСИБО и модуль пользовательской загрузки в подарок с TS настройщиком и прочими вкусностями.
[РЕШЕНИЕ#2 FE_SESSION_KEY (works !!!) ]
Чтобы получить FE_SESSION_KEY дальше через USER_INT на страницу
PHP код:

FE_SESSION_KEY $GLOBALS["TSFE"]->fe_user->id.
"-".md5($GLOBALS["TSFE"]->fe_user->id.
"/".$GLOBALS["TYPO3_CONF_VARS"]["SYS"]["encryptionKey"]; 

[РЕШЕНИЕ#1 ХАК]

Делаем не большой хак (кстати я думаю его можно сделать и другим способом "плугином"), но так просто нагляднее.

в index.php в корне добавляем перед инклюдом index_ts.php, можно добавить проверку и длину и символов, но это не принципиально.
PHP код:

if (isset($_POST['fe_typo_user'])) {
    
$_COOKIE['fe_typo_user'] = $_POST['fe_typo_user'];
}elseif (isset(
$_GET['fe_typo_user'])){
    
$_COOKIE['fe_typo_user'] = $_GET['fe_typo_user'];
}

require (
PATH_tslib.'index_ts.php'); 

что получается: если вдруг нам передадут методом GET или POST переменную fe_typo_user то мы ее подменяем в COOKIE тем самым эмулируем то что swf клиент работает с куками.

дальше самое главное в чем в в общем и была проблема это ses_hashlock

структура таблицы fe_sessions

Код:

ses_id          varchar(32)          Нет                       
ses_name        varchar(32)        Нет                   
ses_iplock        varchar(39)        Нет                   
ses_hashlock        int(11)        Нет          0         
ses_userid        int(11)        Нет          0         
ses_tstamp        int(11)        Нет          0         
ses_data        blob        Нет                   
ses_permanent        tinyint(1)        Нет          0

ses_hashlock служит для блокировки сессии в зависимости от браузер, так как данные передаются через swf плугин, то он отправляет пустой USER_AGENT, в результате обработчик сессии просто не может найти эту запись в базе так как ищет совершенно другой ses_hashlock

что сделать:
Код:

$TYPO3_CONF_VARS['FE']['lockHashKeyWords'] = 'useragent';

Присваиваем пустую строку в localconf.php.
$TYPO3_CONF_VARS['FE']['lockHashKeyWords'] = '';

либо меняем значение в инсталяторе как вам удобнее

УРА !!! ВСЕ РАБОТАЕТ !!!


Часовой пояс GMT +4, время: 12:52.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot