【问题标题】:How to get last_activity in Codeigniter 3?如何在 Codeigniter 3 中获取 last_activity?
【发布时间】:2017-11-09 02:31:08
【问题描述】:

我在 Codeigniter 中的会话超时时间少于我在“config/constants.php”文件中指定的时间。我将该常数设置为 3600 秒(一小时),但有时我会在 5 或 10 分钟内被踢出局。这发生在常规 MVC 调用中,不涉及 ajax。

我正在尝试访问 CI 会话中的 last_activity 值,但这是 CI 文档当前所说的:“last_activity:取决于存储,没有直接的方法。抱歉!”

那么我怎样才能访问这个值呢?有什么想法吗?

这里有一些附加信息:

`$config['sess_driver'] = '文件'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = EXPIRE_SESSION; $config['sess_save_path'] = sys_get_temp_dir(); $config['sess_match_ip'] = 假; $config['sess_time_to_update'] = 86400; $config['sess_regenerate_destroy'] = FALSE;'

【问题讨论】:

  • 我不确定,但您可能无法在config.php 中获得您的常量值,请使用硬编码值尝试一次:3600
  • 不确定这是什么 sys_get_temp_dir() 但保存路径类似于APPPATH . 'cache/sessions/';
  • @kishor10d:感谢您的回复。执行“打印'
    '.print_r($this->config,TRUE).'
    ';”告诉我实际上我可以在“config.php”中使用常量。使用值“3600”或“EXPIRE_SESSION”(也是 3600)完全相同。
  • @wolfgang1983:函数 sys_get_temp_dir 就像它所说的那样,它输出系统的临时文件目录。在我的情况下,它是“C:\Users\pedro\AppData\Local\Temp”,并且该位置确实有很多文件和文件夹,所以看起来它正在工作。
  • @PedroAraujoJorge 我不会使用我自己我会在某处使用应用程序目录中的文件夹。

标签: php codeigniter session timeout


【解决方案1】:

如果您使用默认会话处理方案,则最后一个活动是时间戳“列”,或会话文件中的任何内容。每次刷新页面时都应该更新。当您执行诸如访问模式或通过 AJAX 操作页面之类的操作时,它可能不会更新,我没有检查过。

这是手册中作为数据库插入的样子:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(128) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        KEY `ci_sessions_timestamp` (`timestamp`)
);

【讨论】:

  • 关于数据库与文件的会话数据处理。 session 方法的工作原理完全相同。
  • 感谢您的帮助。我刚刚做了一些测试,看起来“__ci_last_regenerate”只是存储登录日期。当我转到其他页面或控制器并查看其值时,它不会改变。它在整个会话期间保持不变。但是我注意到存储在那里的日期没有考虑我的时区,即 GMT+01(一小时后)。会不会跟这个有关系?
  • @PedroAraujoJorge 我为我完全愚蠢的回答道歉。我引用的值只是它最后一次刷新会话 ID。这可能是我发布过的最错误的答案,不包括讽刺和元答案。对于您为此浪费的任何时间,我深表歉意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多