2010-12-09 7 views
0

Я использую Codeigniter с установленной библиотекой TankAuth и пытаюсь загрузить в index.php/requests/doUpload из swfupload, но не может получить доступ к странице как аутентифицированной. Я прочитал много сообщений по сети о подобной проблеме и попытался установить $config['sess_match_useragent'] = FALSE;, но все равно никакой разницы. Я закончил тем, что пропустил проверку входа в контроллер в целях тестирования. Но теперь мне нужно получить доступ к библиотеке tankAuth от моего контроллера, чтобы получить текущий зарегистрированный идентификатор пользователя. Он запрашивается в моем приложении и не может пропустить его, мне действительно нужно передать зарегистрированный идентификатор пользователя в эту модель doUpload. У меня есть контроллер установки, как это:Codeigniter + TankAuth + Swfupload не может получить идентификатор пользователя logger

function doUploadFileFn() { 
     if (!$this->tank_auth->is_logged_in()) { 
      return; 
     } else { 
      $user_id = $this->tank_auth->get_user_id(); 
      $this->load->model('requests/doUploadFile'); 
      $this->doUploadFile->uploadData($user_id); 
      } 

    } 

Теперь он не проходит is_logged_in() проверить, как я узнал от других сообщений, CI удаляет сеанс, но у меня есть настройки конфига не совпадать с агентом пользователя, но все еще не работает.

Есть ли какие-либо решения для этого?

ответ

2

После обучения в CI forums я смог добиться того, о чем вы просите.
1) Поместите это в конфиге SWFUpload JS:

post_params: {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"}, 

2) и поместите файл MY_Session.php в папку application/libraries/.

3) Новая библиотека должна быть загружена в тот момент, когда представление загружено, если нет (по какой-либо причине), затем загрузите свою библиотеку в контроллер.

PS: Вы должны установить:

$config['sess_match_useragent'] = FALSE; 

В противном случае новая сессия будет создана для UserAgent Shockwave Flash

EDIT: Хорошо, основываясь на вашем comment..you действительно необходимо установить ваш post_params на ваш текущий сеанс, чтобы его можно было отправить, когда вспышка post на ваш контроллер, теперь в вашем случае лучшая вещь, о которой я мог думать, - это следующее:
Ваш внешний интерфейс для подключения к Интернету.ЯШ:

// JS scripts... 
... 
var swfu = new SWFUpload({ 
    ... 
    ... 
    post_params: GLOBAL_VAR, 
    ... 
}); 
    ... 
// rest of your JS 

А на ваш взгляд, PHP и перед загрузкой этого JS файла есть что-то вроде:

<script> 
var GLOBAL_VAR = {}; 
<?php if(session_is_there) { ?> 
GLOBAL_VAR = {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"} 
<?php } ?> 
</script> 
<script type="text/javascript" src="<?php echo base_url() ?>path/to/js/externalUntouchableJsFile.js"></script> 

EDIT 2: Поскольку вы используете внешний JS файл, вы можете забыть определить глобальная переменная, так что используйте:

post_params: (typeof GLOBAL_VAR === 'undefined') ? {}:GLOBAL_VAR, 
+0

У меня уже есть этот конфиг, только я не могу передать такие параметры, потому что я использую JS-файл для запуска скрипта, а не файлов PHP. Я не могу вызвать такие переменные. Только если я буду использовать файл PHP с заголовком JS, только для этого, но я не предпочитаю этот метод. Благодарю. – 2011-01-05 11:16:45

0

Следует отметить, что файл Flash должен обслуживаться из того же домена, что и ваш сайт CI, или один не сможет читать файлы cookie другого. Также убедитесь, что путь cookie для входа установлен в корневой путь. Если SWFUpload не может прочитать файл cookie для входа, он также не может отправить его.

Вспышка имеет ограниченный доступ к сессионным файлам cookie, as documented here in the SWFUpload forum. Возможно ли, что вы установили автоматический вход в систему, чтобы не устанавливать истечение срока действия (в config/tank_auth.php), тем самым делая его сессионным cookie? Если это так, SWFUpload SWF может не получить доступ или отправить значение cookie автологина в зависимости от версии Flash-плеера на компьютере. Дважды проверьте значения срока действия cookie с помощью инструмента отладки, такого как Firebug, чтобы убедиться, что это так. Если загрузка работает, когда вы проверяете поле «запомнить» меня, но не иначе, это указывает на проблему cookie сеанса.

Чтобы заставить SWF передать значение cookie TankAuth при загрузке файлов, вы можете сначала перегрузить функцию get_cookie помощника cookie для поиска в массиве $ _COOKIE или массиве $ _POST для значений. Затем выясняется, что with SWFUpload v2 you can send additional POST values along with the upload, и это будет способ отправки ключа автологина, который затем позволит вашему контроллеру получить user_id. Но прежде чем взломать помощник Cookie, убедитесь, что ваши движущиеся части работают сначала, как описано в первом абзаце.

0

мне удалось применить грубую исправить это путем пропускания регистрируется идентификатор пользователя в URL, и получить его из Java скрипт с функциями URL. Это лучший метод, на который я могу положиться прямо сейчас, это не сильно меня беспокоит, что идентификатор пользователя виден, потому что я использую управляемый iframe для отображения этой конкретной части приложения, и приложение предназначено только для внутреннего использования компании ,

Спасибо за ваши ответы.