2

我有一个应用程序对过滤器中的外部服务器进行身份验证。在该过滤器中,我尝试使用 Symfony 的setAttribute()方法为用户设置几个会话属性:

$this->getContext()->getUser()->setAttribute( 'myAttribute', 'myValue' );

我发现的是,如果我$_SESSION在设置属性后立即转储。另一方面,如果我调用getAttribute( 'myAttribute' ),我会准确地返回我输入的内容。

一直以来,我都假设读/写用户属性与读/写会话是同义词,但这似乎是一个不正确的假设。有时间问题吗?我没有收到任何非对象错误,因此用户似乎已完全初始化。

这里的断线在哪里?

谢谢。

更新

发生这种情况的原因是因为我有一些代码myUser::shutdown()清除了一堆东西。因为myUser它大致相当于 $_SESSION(至少在属性方面),所以我假设该shutdown()方法将在每个会话结束时调用。它不是。它似乎在每个请求结束时被调用,这就是为什么我的属性似乎从未被设置的原因。

不过,现在我想知道是否有会话关闭回调。有人知道吗?

4

1 回答 1

1

根据您如何处理会话,会话存储类有两种方法,sessionGC(在垃圾收集时调用)和 sessionDestroy。

您可以创建自己的会话类来扩展您当前使用的任何一个,我们使用 Doctrine/PDO。默认为 sfSessionStorage。

要更改您使用的类,请编辑 factory.yml:

all:
  storage:
    class: mySuperNewSessionStorageClass
于 2010-06-15T19:11:48.070 回答