我正在使用安装了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删除了会话,但我已经将配置设置为与用户代理不匹配,但仍然不起作用。
有什么解决方案吗?
发布于 2011-01-05 09:43:22
按照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)新的库应该在视图加载的时候加载,如果没有(由于某种原因),则在控制器中加载您的库。
附注:您需要设置:
$config['sess_match_useragent'] = FALSE;否则,将为用户代理Shockwave Flash创建一个新会话
编辑:好的,基于你的comment..you确实需要将你的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>EDIT 2:由于您使用的是外部js文件,因此您可能忘记定义全局变量,因此请使用:
post_params: (typeof GLOBAL_VAR === 'undefined') ? {}:GLOBAL_VAR,发布于 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辅助对象之前,请确保您的移动部分首先工作,如第一段中所述。
发布于 2011-01-05 19:23:12
我已经设法通过在URL中传递登录的用户ID,并使用URL函数从Javascript获取它,从而对此进行了粗略的修复。这是我现在可以依赖的最好的方法,我并不太担心用户ID是可见的,因为我正在使用一个托管的iframe来显示应用程序的特定部分,并且该应用程序仅供公司内部使用。
谢谢你的回答。
https://stackoverflow.com/questions/4398892
复制相似问题