无法在CodeIgniter中使用会话类检索会话ID [英] Cannot retrieve session id using session class in CodeIgniter
问题描述
我有这个代码在我的控制器
i have this code in my controller
class Upload_center extends Controller
{
function __construct()
{
parent::Controller();
$this->load->model('auth_model') ;
if(!$this->auth_model->authorize())
{
redirect('login');
}
}
此代码在我的视图中
$('#swfupload-control').swfupload({
upload_url: "<?=base_url()?>index.php/upload_center/upload",
file_post_name: 'fileupload',
file_size_limit : "200000000",
file_types : "*.zip;*.rar;*.pdf;*.doc;*.docx;*.mp3;*.avi;*.wmv;*.docx;*.jpg;*.jpeg;*.JPG;*.JPEG;*.png;*.gif;*.bitmap;",
file_types_description : "zip files ",
post_params: {"PHPSESSID": "<?=$this->session->userdata('session_id');?>"} ,
file_upload_limit : 1,
flash_url : "<?=base_url()?>js/jquery-swfupload/js/swfupload/swfupload.swf",
button_image_url : '<?=base_url()?>js/jquery-swfupload/js/swfupload/wdp_buttons_upload_114x29.png',
button_width : 114,
button_height : 29,
button_placeholder : $('#button')[0],
debug: false
我想让用户在登录后上传他们的文件,所以我有一个方法,需要用户登录后,才继续上传文件。虽然我在我的视图中使用闪存上传器,我认为它不通过会话值,PHP认为用户没有登录,并将其重定向到登录页面。我通过邮寄发送 phpsessionid
。
I want the user to upload their files after login, so I have a method that needs users to login before proceeding to upload files. Although I'm using flash uploader in my view, I think it doesn't pass the session value and PHP thinks the user is not logged in and it redirects him to the login page. I send phpsessionid
by post but still no goes.
推荐答案
会话Cookie到期设置为?在CodeIgniter中有一个已知的错误,如果你留在一个页面,使AJAX重新排序超过cookie过期,它将重置数据库中的会话ID,但将无法设置它在浏览器cookie,因为它是一个异步请求。这导致在下一个非异步GET请求上断开连接,导致会话库调用sess_destroy()。如果这听起来像你的情况,让我知道。
What's your session cookie expiration set to? There is a known bug in CodeIgniter where, if you stay on a page that makes AJAX requets past the cookie expiration, it will reset the session id in the database, but will not be able to set it in the browser cookie because it's an asynchronous request. This causes there to be a disconnect on the next non-asynchronous GET request, leading to the session library calling sess_destroy(). If this sounds like your situation, let me know. Otherwise, provide more detail, please.
编辑:我也应该在这里提供这个错误的修正。在/ application / libraries中创建一个名为MY_Session.php的文件(如果它不存在)。在这里你可以粘贴这:
I should, perhaps, also include the fix for this bug here. Create a file in /application/libraries called "MY_Session.php" (if it doesn't already exist). In there you can paste this:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
* Session Class Extension
*/
class MY_Session extends CI_Session {
/*
* Do not update an existing session on ajax calls
*
* @access public
* @return void
*/
function sess_update() {
if ( !isAjax() ){
parent::sess_update();
}
}
}
?>
这是Ajax()函数是一个帮助我在/application/helpers/isajax_helper.php看像这样:
That isAjax() function is a helper I have in /application/helpers/isajax_helper.php that looks like this:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* is_ajax_call
*
* Determines if the current page request is done through an AJAX call
*
* @access public
* @param void
* @return boolean
*/
if ( ! function_exists('isAjax')) {
function isAjax() {
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
}
}
?>
这样在我的配置文件中引用:
Which is referenced in my config file like this:
$autoload['helper'] = array('otherhelper1', 'isajax', 'otherhelper2');
这篇关于无法在CodeIgniter中使用会话类检索会话ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!