Codeigniter会话类禁用特定控制器

时间:2013-09-11 06:41:27

标签: php codeigniter-2

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

2 个答案:

答案 0 :(得分:1)

您的问题现在相当陈旧,但对于遇到此问题的任何人,您应该扩展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;
}

答案 1 :(得分:1)

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

创建文件application / libraries / 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;
    }   
}  

您可能还想添加&#39;会话&#39;到你的config / autoload.php:

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