【问题标题】:symfony2 sessions, cookies, or something completely different?symfony2 会话、cookie 或完全不同的东西?
【发布时间】:2012-03-31 00:47:55
【问题描述】:

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

打卡后我设置了一个这样的会话:$this->get('session')->set('clockedin', 'true');

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

那么,这是执行此操作的最佳方式还是有更好的推荐方式?

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

session:
    cookie_lifetime:       43200
    auto_start:     true

那么,这是否意味着我设置的方式会持续 12 小时?或者为了实现这一点,我是否需要使用 cookie 来代替?我认为 cookie 可能会更好,因为如果浏览器关闭(许多员工没有技术倾向),我需要它在下一页加载时保持不变..

感谢您的帮助..

【问题讨论】:

  • cookie_lifetime 位于 framework.session 下??如果我在那里设置它,我会收到此错误:“framework.session”下的无法识别的选项“cookie_lifetime”。它不是为你而来的吗?

标签: session cookies symfony


【解决方案1】:

如果另一个无限期以后的操作依赖于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 %}

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

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 2022-11-20
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多