【问题标题】:Codeigniter database session update inconsistencyCodeigniter 数据库会话更新不一致
【发布时间】:2014-08-19 20:33:04
【问题描述】:

在Codeigniter中,函数session->userdata($item)用于检索会话数据,该函数在Session类中的定义是:

function userdata($item)
{
    return ( ! isset($this->userdata[$item])) ? FALSE : $this->userdata[$item];
}

现在的问题是这样的:

每次执行脚本时,都会创建一个会话对象,并且检索到的数据会一直持续到脚本结束。因此,如果另一个脚本例如更新会话值,新值将存储在数据库中,但在其他会话对象中检索到的数据不会更新,这会导致数据明显不一致和不准确。
我认为在很多情况下这可能是一个严重的问题。

是对的还是我在这里误解了什么?如果

【问题讨论】:

    标签: database codeigniter session


    【解决方案1】:

    IN codeigniter 会话对象是在类初始化期间创建的,并且每次用户发出请求时都会更新用户数据(会话值)。您可以通过以下代码查看整个会话对象:

    print_r($this->session);
    

    这将向您显示完整的会话对象以及您在配置文件中为会话相关变量设置的所有必要配置,例如:

    sess_encrypt_cookie, sess_use_database,sess_expiration ..etc
    

    加上您当前的会话用户数据。现在,当您发出下一个请求时,会话值会被新的值覆盖,或者旧的值会被新的值替换。因此,不会出现数据重复或不一致的情况。当您在会话中保存大量数据时,建议使用会话表。

    【讨论】:

    • 我在我的问题中添加了函数userdata() 定义。据此,每次用户提出请求时如何更新会话值??
    • 正如您所提到的“另一个脚本,例如更新会话值,新值将存储在数据库中”,会话值根据用户请求更新,仅针对已完成一些更新的相应会话变量即例如。如果有自动注销功能,其中时间戳在成功登录后存储在会话中,并在每个用户请求时更新,其中调用一些自动注销功能来检查会话时间戳和当前时间戳的当前差异,如果它超出定义的限制,则用户否则注销会使用当前时间戳更新会话时间戳。
    • 会话用户数据不会自动更新,而是根据要求通过手动脚本更新,否则将在整个活动会话中保持不变
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2017-02-23
    • 2016-06-10
    • 2016-07-12
    • 1970-01-01
    相关资源
    最近更新 更多