symfony2会话,cookie或完全不同的东西?

时间:2012-03-30 16:33:20

标签: session cookies symfony

我目前正在制作一个时钟系统,该系统位于以前的开发人员所做的定制应用程序(CRM)中。我的时间表很好,但只有几个问题..

在进入时,我设置了一个类似的会话:$this->get('session')->set('clockedin', 'true');

我设置一个会话,以便我显示clockin或clockout按钮我认为最简单的方法是只读取一个会话变量来确定使用模板中的twig if / else语句显示哪个按钮(i将按钮显示在2个位置,1在每个页面中,1个仅在时钟系统中显示)

那么,这是最好的方法吗?还是有更好的推荐方式去做呢?

接下来我想知道的是会话到期......在我的config.yml中,我看到了:

session:
    cookie_lifetime:       43200
    auto_start:     true

那么,这是否意味着我设定它的方式持续12个小时?或者为了使其真实,我是否需要使用cookie?我认为cookie可能会更好,因为如果浏览器关闭(许多员工在技术上没有倾向),我需要在下一页加载时保持这种情况。

感谢您的帮助..

1 个答案:

答案 0 :(得分:0)

如果另一个无限期的后续操作取决于clockedin状态,我将不会依赖会话。如果用户自己登录会话失败(整个会话),那么clockedin将会丢失。

每次需要显示该按钮时,我宁愿使用{% include %}{% render %}来确定状态。例如:

/**
 * @Template()
 */
public function clockedInAction(){
   .... // do some login here
   $clocked_in = ....;
   return array(
        'clockedin' => $clockedin
   );
}

并在你的树枝上:

{% render "AcmeBundle:SomeController:clockedIn" %}

此控制器的模板将包含您最初想要的{% if .... %}

{# AcmeBundle:SomeController:clockedIn.html.twig #}
{% if clockedIn %}
   display "Clocked In" button
{% else %}
   display "Clocked Out" button
{% endif %}

现在,这更昂贵,因为在每次请求时你必须评估情况然后打印适当的模板,但它总是与系统一致......