Php 代码点火器+;TankAuth+;Swfupload无法获取记录器用户id
我正在使用安装了TankAuth库的Codeigniter,并试图从swfupload上传到index.php/requests/doUpload,但无法通过身份验证访问页面。我在网上读过很多关于类似问题的帖子,并试图将Php 代码点火器+;TankAuth+;Swfupload无法获取记录器用户id,php,codeigniter,swfupload,tankauth,Php,Codeigniter,Swfupload,Tankauth,我正在使用安装了TankAuth库的Codeigniter,并试图从swfupload上传到index.php/requests/doUpload,但无法通过身份验证访问页面。我在网上读过很多关于类似问题的帖子,并试图将$config['sess\u match\u useragent']=FALSE但仍然没有区别。出于测试目的,我最终跳过了控制器中的登录检查。但是现在我需要从我的控制器访问tankAuth库来获取当前登录的用户ID。它是在我的应用程序中请求的,不能跳过它,我真的需要将登录的用户
$config['sess\u match\u useragent']=FALSE代码>但仍然没有区别。出于测试目的,我最终跳过了控制器中的登录检查。但是现在我需要从我的控制器访问tankAuth库来获取当前登录的用户ID。它是在我的应用程序中请求的,不能跳过它,我真的需要将登录的用户ID传递给那个双负载模型。我有如下设置控制器:
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删除了会话,但我已将配置设置为与用户代理不匹配,但仍然无法工作
有什么解决办法吗?值得一提的是,Flash文件应该与您的CI站点来自同一个域,否则其中一个站点将无法读取另一个站点的cookie。还要确保登录cookie路径设置为根路径。如果SWFUpload无法读取登录cookie,则它也无法发送该cookie
闪存对会话cookie的访问有限。您是否可能设置了自动登录以避免设置过期(在config/tank_auth.php中),从而使其成为会话cookie?如果是这种情况,则SWFUpload SWF可能无法访问或发送autologin cookie值,具体取决于计算机上Flash player的版本。使用诸如Firebug之类的调试工具仔细检查cookie过期值,看看是否存在这种情况。如果在选中“记住”我复选框时上传工作正常,则表明存在会话cookie问题
要强制SWF在文件上载时传递TankAuth cookie值,可以首先重载cookie助手get\u cookie函数,以便在$\u cookie数组或$\u POST数组中查找值。然后,这似乎是发送autologin密钥的方式,它将允许您的控制器获取用户id。但是在破解Cookie helper之前,请确保您的移动部件首先正常工作,如第一段所述。按照中的教程,我能够实现您的要求。
1) 将其放入SWFUpload JS配置中:
post_params: {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"},
否则,将为useragent创建一个新会话Shockwave Flash
编辑:好的,根据您的评论。.您确实需要将post_参数设置为当前会话,以便在flashpost
发送到控制器时可以将其发送,现在在您的情况下,我能想到的最好的方法如下:
您的externalUntouchableJsFile.js:
// 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>
通过在URL中传递记录的用户ID,并使用URL函数从Javascript中获取,我成功地对此进行了粗略的修复。这是我现在可以依赖的最好的方法,用户ID是可见的,这对我来说并没有太大影响,因为我使用的是托管iframe来显示应用程序的特定部分,并且应用程序仅供公司内部使用
谢谢你的回答。我已经有了这个配置,只是我不能像那样传递参数,因为我使用的是JS文件来启动脚本,而不是PHP文件。我不能提出这样的变量。只有当我使用一个带有JS头的PHP文件时,我才会这样做,但我不会预先提供这个方法。谢谢
<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>
post_params: (typeof GLOBAL_VAR === 'undefined') ? {}:GLOBAL_VAR,