【问题标题】:How does Codeigniter's sess_time_to_update workCodeigniter sess_time_to_update 是如何工作的
【发布时间】:2012-12-06 09:43:03
【问题描述】:

基于以下问题/答案 CodeIgniter session class not working in Chrome

我遇到的问题是人们无法从远离美国服务器的另一个国家登录我的网站。在线搜索后,我偶然发现了一个建议,该建议描述了问题是如何基于服务器时区和用户时区之间的差异的。因此,通过延长 session_expiration 我设法解决了这个问题,人们能够成功登录。

我的问题是 sess_time_to_update 是否会创建一个新的时间戳,并且它会因为新的时间戳位于错误的时区而注销用户?我是否必须将新的 sess_time_to_update 设置为 17 小时以上,以便它涵盖最广泛的时区,如我已链接的问题中所述。是否有其他方法可以根据用户的本地时间在用户的浏览器中存储会话(不要求他们在配置文件和其他类型的用户不友好方案中选择时区)。我想要一个 2 小时的默认会话到期时间 + 800 秒。更新时间。我没有使用数据库来存储会话,我宁愿不使用它。

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    sess_time_to_update 设置是会话详细信息(例如上次活动)的更新频率。默认值为每 5 分钟(300 秒),并且将生成一个新的会话 ID。这将根据sess_expiration 设置重置到期日期。

    我建议将sess_time_to_update 保持在默认值(或更低),因为这样可以使用户会话保持更长时间,因为会话到期会不断重置。唯一可能需要保持较高的设置是 sess_expiration,除非您可以确定用户时区。

    您可以通过多种方式尝试确定用户时区。一种是 Javascript(例如:Client Side Timezone Offsetting),或者您可以尝试使用 PHP's GEOIP 方法。

    【讨论】:

    • 那么这是否意味着 session_time_to_update 只更新 ID 和到期日期而不是时间戳?我也很想知道为什么会话不是根据用户的浏览器时间或某种本地时间而不是服务器时间生成的。
    • 到期日期根据 sess_expiration 设置和上次用户活动发生的时间(时间戳)确定。 sess_time_to_update 更新最后一个活动时间戳并重新生成会话 id,因此也会自动更新会话到期时间(最后一个活动 + sess_expiration)。无法使用用户的时间生成会话,因为 CI(和 PHP)无法确定该信息,因为那是浏览器端,并且代码运行在服务器端。
    • 嗯...抱歉,但您为什么建议将sess_time_to_update 保持在低位?我真的不希望用户仅仅“因为”而获得新的会话 ID。
    • 正如前面评论中提到的,它不仅仅是生成一个新的会话 ID。它还会更新最后一个活动时间戳,从而更准确地保持会话处于活动状态。如果您将sess_time_to_update 设置为高,则即使用户可能正在积极地做某事,您也有可能会破坏用户会话。需要告知 CI 定期更新,以便会话保持活动状态。这应该多久取决于您的应用程序。如果您的会话长度为 3 小时,则 5 分钟以下可能是多余的,但如果您的会话设置为 15 分钟,则最好使用较短的时间范围
    • 所以 - 我查看了我的 'sess_save_path' 文件夹,发现超过 1000 个 ci_sesson 文件 - 对于一个每天可能有 3 人登录的网站来说,这是否必要?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2011-09-08
    • 1970-01-01
    • 2013-09-22
    • 2012-06-19
    • 1970-01-01
    • 2011-02-01
    相关资源
    最近更新 更多