【问题标题】:code igniter passing database session_id in view在视图中传递数据库会话 ID 的 codeigniter
【发布时间】:2017-06-28 23:18:50
【问题描述】:

我正在尝试让 Uploadify 与 code igniter 一起工作,但是我遇到了与为“ShockWave Flash”创建新会话而不是拾取已经创建的会话的每个人相同的问题。

我设置了以下设置

$config['sess_cookie_name']     = 'session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'sessions';
$config['sess_match_ip']        = TRUE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update']  = 300;

Code Igniter 会话表是这样的 带浏览器

   session_id: 73b05af777af0e6a56e7bbba8f9714f6
   ip_address: 127.0.0.1
   user_agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/53
last_activity: 1310341663
    user_data: a:6:{s:5:"email";s:32:"test@hotmail.com"}

上传

   session_id: d39bce3d9c734081379b286449cf56ce
   ip_address: 127.0.0.1
   user_agent: Shockwave Flash
last_activity: 1310341167
    user_data: 

我正在尝试破解它并将浏览器 session_id 作为获取方式添加到 php 中,这样当 uploadify 提交时,我可以在给定会话 ID 的情况下检索用户会话数据。

              $(document).ready(function() {   
                $('#uploadify').uploadify({  
                  'uploader'  : '/uploadify/uploadify.swf',   
                  'script'    : '/index.php/upload/uploadify/'.$this->session->userdata('session_id').'',  

我的问题是: 1) 我在源中公开显示 session_id 是不是很糟糕,即使我不这样做,该 session_id 是否可用? 2) 在“上传”控制器上,我如何才能从本质上“加载”该 session_id 或从中获取数据?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:
    1. 造成问题的唯一方法是加密 session_id cookie —— 否则,您不会向用户提供更多真实数据。 (所以,是的,在大多数情况下,他们无论如何都可以获得这些数据)
    2. 您需要在 MY_Session 类中覆盖 sess_read()__construct 以查看自定义变量,或者您可以修改 cookie

    基本上是这样的:

    public function __construct( $id )
    {
       // a hack, but you need a hack
       $_COOKIE[ $this->sess_cookie_name ] = $id;
       parent::__construct();
    }
    

    【讨论】:

    • 非常感谢 cwallenpoole!所以我实际上是在加密会话 cookie,以便对用户加密 cookie,也许我可以对我的 session_id 进行一些自定义加密,以确保它对公众的安全。今晚我会试试上面的代码,谢谢!
    • 几个问题 1) 如果我修改会话类的构造函数,如上所示,如何指定输入的$id?什么是合适的流量。 2)我试图简单地修改 sess_read() 函数并使用我的会话 id 参数手动调用它,从技术上讲这是可行的,但问题是 sess_read 被调用了两次,一次是自动用于上传,第二次是当我在顶部手动调用它时我的控制器,所以我认为我真的需要修改构造函数。 3) 你如何扩展代码点火器库?好像和系统类不太一样……
    • 1. $this->load->library('session', $id); 2. 如果您手动设置 session_id,则调用它的频率无关紧要。有错误吗? 3. 在应用程序/库下创建一个名为 MY_Session.php 的文件。将类 MY_Session 放在其中并使其子类 CI_Session
    • 行尾需要一个分号
    猜你喜欢
    • 2015-12-09
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多