特定控制器的编码点火器会话类禁用


Codeigniter Session class disable for particular controller

我已经在codeigniter中使用了应用程序,现在我正在从这个应用程序开发Android。将此应用程序用作服务器端并在 android 中执行客户端控制台。在服务器中,我维护会话。但是在安卓请求中,我无法维护会话。取而代之的是,我在登录请求的第一个请求时在服务器中创建 GUID,并存储在客户端并存储在客户表中,之后对于每个请求,客户端将发送 GUID 进行身份验证。现在我的问题是每个请求从android代码点火器创建具有不同会话ID的会话(每个请求生成新的会话ID)。如何避免创建会话并存储到数据库中。(仅适用于安卓请求,但浏览器请求必须存储)

我设法在Codeigniter 3.1.3中扩展了CI_Session。这是我所做的:

创建文件应用程序/库/会话/MY_Session.php

<?php                                                                                                                                                                                           
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Session extends CI_Session {
    public function __construct(array $params = array())
    {   
        if ( $this->ignore_sessions() )
            return;
        parent::__construct();
    }   
    function ignore_sessions()
    {   
        $uri = str_replace ("//", "/", $_SERVER['REQUEST_URI']);
        if ( strpos($uri, '/ignore_this_controller/') === 0 ) 
            return true;
        return false;
    }   
}  

您可能还想将"会话"添加到您的配置/自动加载.php:

$autoload['libraries'] = array('session',....)

你的问题现在已经很老了,但对于任何有这个问题的人,你应该扩展CI_Session库并覆盖sess_create方法。在您的方法中,测试以查看哪个用户代理正在发出请求。然后,仅当用户代理不是 android 平台时,才允许创建会话。

public function sess_create
{
   //load user agent library
   $this->CI->load->library('user_agent');
   /**test request to see if its from android
    * you can update the user_agents collection to suit more specific needs
    */
   if($this->agent->platform() !== 'android'):
      //create session for all non-android platforms
      parent::sess_create();
   endif;
}