首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter + TankAuth + Swfupload无法获取记录器用户id

Codeigniter + TankAuth + Swfupload无法获取记录器用户id
EN

Stack Overflow用户
提问于 2010-12-09 21:49:12
回答 3查看 1.2K关注 0票数 0

我正在使用安装了TankAuth库的Codeigniter,并试图从swfupload上传到index.php/requests/doUpload,但无法访问通过身份验证的页面。我在网上看到了很多关于类似问题的帖子,并尝试设置$config['sess_match_useragent'] = FALSE;,但仍然没有区别。出于测试目的,我最终跳过了控制器中的登录检查。但是现在我需要从我的控制器访问tankAuth库来获取当前登录的用户ID,它是在我的应用程序中请求的,不能跳过它,我真的需要将登录的用户id传递给那个doUpload模型。我有这样的设置控制器:

代码语言:javascript
复制
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删除了会话,但我已经将配置设置为与用户代理不匹配,但仍然不起作用。

有什么解决方案吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-05 09:43:22

按照CI forums中的教程,我能够实现您所要求的内容。

1)将其放入SWFUpload JS配置中:

代码语言:javascript
复制
post_params: {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"},

2)并将MY_Session.php文件放在您的application/libraries/文件夹中。

3)新的库应该在视图加载的时候加载,如果没有(由于某种原因),则在控制器中加载您的库。

附注:您需要设置:

代码语言:javascript
复制
$config['sess_match_useragent'] = FALSE;

否则,将为用户代理Shockwave Flash创建一个新会话

编辑:好的,基于你的comment..you确实需要将你的post_params设置设置为你的当前会话,这样它就可以在闪存post发送到你的控制器时发送给你,现在对于你来说,我能想到的最好的事情是:

您的externalUntouchableJsFile.js:

代码语言:javascript
复制
// JS scripts...  
...
var swfu = new SWFUpload({  
    ...
    ...
    post_params: GLOBAL_VAR,
    ...
});  
    ...  
// rest of your JS

在您的PHP视图中,在加载此JS文件之前,请执行以下操作:

代码语言:javascript
复制
<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文件,因此您可能忘记定义全局变量,因此请使用:

代码语言:javascript
复制
post_params: (typeof GLOBAL_VAR === 'undefined') ? {}:GLOBAL_VAR,
票数 2
EN

Stack Overflow用户

发布于 2011-01-05 07:54:08

值得一提的是,Flash文件应该与您的CI站点来自相同的域,否则一个站点将无法读取另一个站点的cookie。还要确保将登录cookie路径设置为根路径。如果SWFUpload不能读取登录cookie,它也不能发送它。

Flash对会话cookies、as documented here in the SWFUpload forum的访问权限有限。您是否已经设置了自动登录,以避免设置过期(在config/tankeauth.php中),从而使其成为会话cookie?如果是这种情况,则Flash SWF可能无法访问或发送自动登录Cookie值,具体取决于计算机上的SWFUpload player版本。使用Firebug之类的调试工具仔细检查您的cookie期满值,看看情况是否如此。如果在勾选“记住”框时上传有效,但在其他情况下不起作用,则表明存在会话cookie问题。

要强制SWF在文件上载时传递TankAuth Cookie值,可以首先重载cookie helper get_cookie函数以在$_COOKIE数组或$_POST数组中查找值。然后,看起来with SWFUpload v2 you can send additional POST values along with the upload,这将是发送自动登录密钥的方式,这将允许您的控制器获得user_id。但在破解Cookie辅助对象之前,请确保您的移动部分首先工作,如第一段中所述。

票数 0
EN

Stack Overflow用户

发布于 2011-01-05 19:23:12

我已经设法通过在URL中传递登录的用户ID,并使用URL函数从Javascript获取它,从而对此进行了粗略的修复。这是我现在可以依赖的最好的方法,我并不太担心用户ID是可见的,因为我正在使用一个托管的iframe来显示应用程序的特定部分,并且该应用程序仅供公司内部使用。

谢谢你的回答。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4398892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档