代码之家  ›  专栏  ›  技术社区  ›  Rob Wilkerson

Symfony的用户属性何时写入会话?

  •  2
  • Rob Wilkerson  · 技术社区  · 15 年前

    我有一个Symfony应用程序,它填充了一个门户应用程序的“小部件”,我注意到了一些(似乎)奇怪的事情。门户应用程序具有调用Symfony应用程序的iframe。在每个调用中,都会在查询字符串上传递一个随机用户键。Symfony应用程序使用 myUser->setAttribute() . 如果传入值与会话中的值不同,它将覆盖会话值。

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

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

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

    谢谢。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Jeremy Kauffman    15 年前

    直到请求结束(在 sfUser::shutdown

    • 向sfUser添加硬读和硬写方法(看看 sfUser::initialize sfUser::关机
    • 使用另一种存储信息的方法,这种方法对并发性有更好的支持。您使用的数据库或可能的缓存系统可以工作。例如,我认为这可以使用APC缓存来完成。

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