gpt4 book ai didi

mysql - 即使未加载 codeigniter session 库,也会在数据库中创建新的 session 条目。为什么?

转载 作者:行者123 更新时间:2023-11-29 06:00:33 24 4
gpt4 key购买 nike

我在使用 Chris Kacerguis 的 CodeIgniter REST 服务器时遇到了一个相当奇怪的问题。

问题:

1) 我没有加载 CodeIgniter session 库,即便如此,每次我向我的 REST Api 发出 HTTP 请求时,都会在 ci_sessions 数据库表中创建新条目。

2) 在每次 HTTP 请求时,数据库中都会创建一个全新的条目(旧条目不会更新),即使 IP 地址保持不变也是如此。

这是我的 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';

但没有任何效果。

这是正常现象还是某种错误?我究竟做错了什么?还有其他人遇到同样的问题吗?

另一件事是,我在 vanilla CodeIgniter 中没有遇到这个问题。在那里,一切都按预期正常工作。

更新

我在努力解决问题的第二部分时发现了一些东西。

在发出第一个 HTTP 请求时,在数据库中创建了两个 session 条目 - 一个用于客户端,另一个用于 REST 服务器。从第二个请求开始,cookie 的客户端“版本”正在更新,而服务器“版本”正在重新生成。

最佳答案

对于问题的第一部分:

正如@JamesLalor 在评论中指出的那样,

  1. 您必须自动加载 session

  2. 您正在使用一些外部库,而这些库又会加载 session 库。

对于问题的第二部分:

以下解决方案可能不是最好的,但对我有用。

多个 session 创建问题发生在:

  1. 您在同一个 CodeIgniter 应用程序目录中同时拥有 REST 服务器和客户端

  2. session 库自动加载

对于Client来说,用户就是消费者。为用户创建一个 session ,具有该用户的 IP 地址。在用户的浏览器上设置了一个 cookie,使用该 cookie 可以根据验证验证和更新(或新建) session 。

对于REST Server来说,Client就是消费者。这里也创建了一个session(如果上面的条件1和2都满足),但是这次是给Client的,这个session有Client所在服务器的IP地址(如果上面的条件1都满足) ,则它是您的应用程序所在的同一服务器的 IP 地址)。但是这次无法设置 cookie,因为消费者不是浏览器。因此, session 验证失败,每次加载页面时都会创建一个新 session 。

解决方案:

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

因此,假设您不需要 REST 服务器中的 session ,解决方案是从 autoload['libraries'] 列表中删除 session,在autoload.php 文件,并在客户端构造函数中加载库(或在您需要时)

对于语法错误和/或糟糕的英语,我们深表歉意。这不是我的母语。

关于mysql - 即使未加载 codeigniter session 库,也会在数据库中创建新的 session 条目。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45308812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com