2017-07-25 66 views
1

我对Chris Kacerguis的CodeIgniter REST服务器有一个相当奇怪的问题。即使未加载codeigniter会话库,也会在数据库中创建新的会话条目。为什么?

问题:

1)我不加载笨会话库,即使在当时都在ci_sessions数据库表中创建新条目,每次我提出一个HTTP请求到我的REST API。

2)即使在IP地址保持不变的情况下,每个HTTP请求中的数据库中都会创建一个全新条目(并且旧条目不会更新)。

这是我的config.php文件:

$config['sess_driver'] = 'database'; 
$config['sess_cookie_name'] = 'ci_session'; 
$config['sess_expiration'] = 0; 
$config['sess_save_path'] = 'ci_sessions'; 
$config['sess_match_ip'] = TRUE; 
$config['sess_time_to_update'] = 300; 
$config['sess_regenerate_destroy'] = TRUE; 

$config['cookie_prefix'] = ''; 
$config['cookie_domain'] = ''; 
$config['cookie_path']  = '/'; 
$config['cookie_secure'] = FALSE; 
$config['cookie_httponly'] = FALSE; 

我试过了,单独和组合,下面的事情:

$config['sess_match_ip'] = FALSE; 
$config['sess_time_to_update'] = 0; 
$config['sess_regenerate_destroy'] = FALSE; 

$config['cookie_domain'] = '.mydomain.com'; 

但毫无效果。

这是正常还是某种错误?我究竟做错了什么?其他人还有相同的疑问么?

另一件事是,我没有在香草CodeIgniter中面临这个问题。在那里,一切工作正常,如预期。

更新

我发现的东西,而这个问题的第二部分中挣扎。

在创建第一个HTTP请求时,数据库中正在创建两个会话条目 - 一个用于客户端,另一个用于REST服务器。从第二个请求中,cookie的客户端'版本'正在更新,而服务器'版本'正在重新生成。

+0

检查自动加载? –

+0

已经选中并重复检查。会话不在那里。 – Raja

+0

无论您正在使用哪种库来执行REST API,都可能正在使用会话。 –

回答

2

有关问题的第1部分:

正如@JamesLalor在评论中指出,

  1. 您必须是自动加载会话

    OR

  2. 你是使用一些外部库,然后加载会话库。

对于问题的第二部分:

以下解决方案可能不是最好的,但它为我工作。

  1. 你有相同的CodeIgniter应用程序目录中同时REST服务器和客户端

  2. 会议库自动:当发生

    多个会话创建问题 - 已加载

对于客户来说,用户就是消费者。会话为用户创建,具有该用户的IP地址。在用户的浏览器上设置一个cookie,根据验证结果验证和更新会话(或新创建)。

对于REST服务器,客户端是用户。这里还创建了一个会话(如果满足上述条件1和2),但是这次是为客户端创建的,并且此会话具有客户端所在的服务器的IP地址(如果满足上述条件1 ,那么它就是您的应用所在的同一台服务器的IP地址)。但是这次不能设置cookie,因为消费者不是浏览器。因此,会话验证失败,并且每次加载页面时都会创建一个新会话。

解决方案:

REST是无状态的,每个请求应包含所有完成请求所需的信息。因此,在REST服务器上使用会话(其唯一工作是维护用户的状态)被认为是不好的做法。客户端的工作是维护用户的会话并在每个请求上将所需信息传递给REST服务器。

因此,假设你会不会需要REST服务器内的会话,解决的办法是autoload[‘libraries’]列表中删除sessionautoload.php文件中,并加载客户端的构造函数中的库(或当你需要它)

对不起语法错误和/或英语不好。这不是我的母语。