gpt4 book ai didi

symfony1 - Symfony 的用户属性何时写入 session ?

转载 作者:行者123 更新时间:2023-12-04 06:51:31 24 4
gpt4 key购买 nike

我有一个 Symfony 应用程序,它填充门户应用程序的“小部件”,我注意到一些(看起来)很奇怪的事情。门户应用程序具有调用 Symfony 应用程序的 iframe。在每次调用时,都会在查询字符串上传递一个随机用户 key 。 Symfony 应用程序使用 myUser->setAttribute() 存储其 session 的 key .如果传入的值与 session 中的值不同,它会覆盖 session 值。

在伪代码中(为了清晰起见应用同步性质,即使它可能不存在):

# Widget request arrives with ?foo=bar
if the user attribute 'foo' does not equal 'bar'
overwrite the user attribute 'foo' with 'bar'
end

我注意到的是,在需要覆盖值的多个小部件(读取:多个请求或多或少同时传入)的门户页面上,每个请求都试图覆盖。这是时间问题吗?当我查看日志打印时,我希望到达的第一个请求覆盖,随后的请求看到他们收到的用户属性与初始请求刚刚放入缓存的内容相匹配。

在这种情况下,后续请求甚至可能在第一个请求(应该覆盖缓存值的请求)完全完成之前就开始(并被检查)。在一个请求完全完成之前, session 值是否真的无法用于后续请求,还是我遗漏了其他东西?

谢谢。

最佳答案

直到请求结束(在 sfUser::shutdown 中),用户的属性才会写入存储。属性在请求开始时加载到 sfUser 中。所以在这种情况下,第二个请求必须在第一个请求完成后发起。你最好的选择可能是

  • 向 sfUser 添加 hardRead 和 hardWrite 方法(看看 sfUser::initializesfUser::shutdown 分别做了什么)。
  • 使用另一种更好地支持并发的信息存储方法。您正在使用的数据库或潜在的缓存系统可以工作。例如,我认为这可以使用 APC 缓存来完成。

  • 请注意,根据您用于存储的类,用户属性可能根本不会写入 $_SESSION。 Symfony 支持使用多种方法来存储用户属性(例如数据库、缓存)。

    关于symfony1 - Symfony 的用户属性何时写入 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3054061/

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