gpt4 book ai didi

database - Codeigniter 在数据库中存储 session

转载 作者:太空狗 更新时间:2023-10-30 01:56:34 25 4
gpt4 key购买 nike

我在使用 codeigniter 将 session 存储在数据库中时遇到问题。

当用户登录时,会创建一个 session 并将其存储在数据库中。数据填充到数据库中。当用户使用注销按钮时, session 数据被清空,但是 session 仍然存在于数据库中。

问题是当用户不使用注销按钮而只是关闭网络浏览器时。 session数据没有清空,但是用户还是处于登出状态。 (我已经在我的配置文件中设置了这个) session 应该在数据库中销毁,但它没有!

当用户在点击“注销”按钮后重新登录时,用户第一次登录时创建的 session 将再次填充数据。所以这没有问题。

但是当用户在关闭浏览器后重新登录时,它会创建一个新 session 。

这个问题最终导致无休止的 session ,每次用户关闭浏览器时都会创建 session 。

还有一些让我感到困惑的事情:当我使用一个帐户登录时,会创建一个 session 。然后,当我使用该帐户注销并使用另一个帐户登录时,该 session 将存储在与另一个帐户相同的记录中。 session 表中的新记录何时创建?

我使用的是 2.1.3 版的 codeigniter。

我做错了什么?

//Session config:

$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;

最佳答案

您已将 sess_expire_on_close 设置为 TRUE,因此这是预期的行为,并且您通常在大多数情况下都希望如此。问题是,当浏览器关闭并再次打开时,会生成一个新的 cookie(因此会生成 session )。来自CI session class documentation (转到讨论在数据库中保存 session 的底部):

Note: The Session class has built-in garbage collection which clears out expired sessions so you do not need to write your own routine to do it.

因此,您不必担心寻址问题,孤立 session 将由 session 类自动从数据库中进行垃圾回收。如果你愿意,你可以通过 cron 实现代码来清除它,但你真的不需要这样做。

现在,如果这对特定登录用户造成问题(例如“记住我”)但是您希望 session 在其他人关闭时过期,您可以通过手动设置另一个比您的 session cookie 更持久的 cookie 并在您的 session 数据库中关联其中的项目来解决它。这使您可以弄清楚用户“是谁”,并在 session 神奇地为他们保留时重建 session 。关于那个还有更多in this answer一个有点相关的问题。

关于database - Codeigniter 在数据库中存储 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791222/

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