【问题标题】:Differentiate session timeout in codeigniter在 codeigniter 中区分会话超时
【发布时间】:2017-10-31 03:48:01
【问题描述】:

是否可以让两个用户数据具有不同的超时/到期时间?假设第一个数据“param_1”在 1 天内过期,“param_2”在一个月内过期。如何使用 CI 会话库做到这一点。可能是这样的

$this->session->set_userdata('param_1', 86400);  // seconds in a day
$this->session->set_userdata('param_2', 2592000); // seconds in a month

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅How to Ask 页面以获得澄清此问题的帮助。
  • 也许这会对你有所帮助stackoverflow.com/questions/520237/…

标签: php codeigniter-3


【解决方案1】:

这可以通过"Tempdata":

$this->session->tempdata($key, $value, $validForTime);

但是,一个会话的持续时间不应超过几个小时甚至一天。如果您希望某个变量持续更长的时间,那么会话绝对是错误的工具。

【讨论】:

  • 我的目标是了解用户是否因为登录会话过期而被注销,或者仅仅是因为该人故意注销或可能从未登录过。所以我有一个想法来创建一个非常长寿的会话变量,与登录会话分开以区分情况。从那里将向用户显示适当的消息。知道怎么做吗?至于 Tempdata 看起来很有希望,但它似乎只适合短期会话,不确定它可以保持的最大值
  • 那肯定是XY problem。你的想法甚至不可行。
  • 非常简单,只需在手动注销时在会话中添加存储另一个值
  • @SahibKhan 您的回答在用户手动注销时有效,但更多次用户在会话到期时自动注销。但是您为我的问题打开了另一种可能的解决方案,如果可以确定 codeigniter 何时因超时而拒绝 cookie,那么我们可以将代码设置为自动注销事件
  • 您现在要求超时挂钩。我想说,确定用户是否已注销并且手动注销键是否存在(这是超时注销做某事,然后删除手动注销键)
【解决方案2】:

只有在客户端上的 cookie 设置在与正常域不同的域上,并且具有更长的过期日期并验证它而不是会话数据时,这才有可能。在更实际的情况下,在页面上使用 ajax .get 到一个特定的 url,该 url 验证两个 cookie 而无需启动会话(因为会话可能已经过期)。

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多