我已经在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;
}