0

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

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 删除了会话,但我设置了与用户代理不匹配的配置,但仍然无法正常工作。

有什么解决办法吗?

4

3 回答 3

2

按照CI 论坛中的教程,我能够实现您的要求。
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;

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

编辑:好的,根据您的评论..您确实需要将您的post_params设置设置为当前会话,以便在闪存post到您的控制器时发送它,现在在您的情况下,我能想到的最好的事情如下:
您的 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>

编辑 2:由于您使用的是外部 js 文件,您可能会忘记定义全局变量,因此请使用:

post_params: (typeof GLOBAL_VAR === 'undefined') ? {}:GLOBAL_VAR,
于 2011-01-05T01:43:22.277 回答
0

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

Flash 对会话 cookie 的访问受到限制,如 SWFUpload 论坛中所述。您是否可以设置自动登录以避免设置过期(在 config/tank_auth.php 中),从而使其成为会话 cookie?如果是这种情况,则 SWFUpload SWF 可能无法访问或发送自动登录 cookie 值,具体取决于计算机上 Flash 播放器的版本。使用 Firebug 之类的调试工具仔细检查您的 cookie 过期值,看看是否是这种情况。如果在您选中“记住”我的框时上传工作正常,但不是其他情况,则表明会话 cookie 有问题。

要强制 SWF 在文件上传时传递 TankAuth cookie 值,您可以首先重载 cookie 帮助器 get_cookie 函数以在 $_COOKIE 数组或 $_POST 数组中查找值。然后,似乎使用 SWFUpload v2,您可以在上传时发送额外的 POST 值,这将是发送自动登录密钥的方式,这将允许您的控制器获取 user_id。但在破解 Cookie 助手之前,请确保您的移动部件首先正常工作,如第一段所述。

于 2011-01-04T23:54:07.567 回答
0

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

感谢您的回答。

于 2011-01-05T11:23:11.957 回答