2

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

4

2 回答 2

2

我设法在 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;
    }   
}  

您可能还想在 config/autoload.php 中添加“会话”:

$autoload['libraries'] = array('session',....)
于 2017-02-20T20:07:12.267 回答
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;
}
于 2015-07-02T12:50:20.507 回答