symfony2将会话ID作为GET参数附加到Url

时间:2016-04-06 08:51:04

标签: symfony

我觉得我的问题非常基本,我无法找到相关信息。

在我们的symfony2应用中,我们希望将sessionId作为GET参数附加到每个Url。例如 http://example.com/blog/?sid=28397497523423irzeuw96ft73rzifr67tw

我们希望将其用作识别用户进行调试以及识别不允许在浏览器上使用Cookie的用户的方式。

我怎样才能做到这一点?是否有Symfony方式?或者我是否必须开发一个类来附加会话?听众可能吗?

澄清我的问题:

  1. :我正在寻找一个让我的应用程序始终将get参数附加到每个调用的中心位置。

  2. :我正在寻找正确的地方再次阅读(虽然我想我会使用我发现的听众)

  3. 我们在Apache服务器上使用Symfony 2.7。

1 个答案:

答案 0 :(得分:1)

我们最终解决的问题是: 我们已经有了一个扩展Twig功能的类。它位于文件夹../OurBundle/Twig中,名为

class CoreExtension extends Twig_Extension implements Twig_Extension_GlobalsInterface {....

我们有一个方法:

public function addSession($url)
{
    $sessionId = VisitorHolder::get()->getSessionId();
    $query = parse_url($url, PHP_URL_QUERY);
    parse_str($query, $arrQuery);

    if (empty($query)) {
        $url .= '?'.self::OUR_SESSION_ID_VAR_NAME.'='.$sessionId;
    } elseif (!empty($query) && empty($arrQuery[self::GKM_SESSION_ID_VAR_NAME])) {
        $url .= '&'.self::OUR_SESSION_ID_VAR_NAME.'='.$sessionId;
    }

    return $url;
}

在twig文件中(我真的希望避免这种情况),我们改变了我们的想法,如下所示:

<p>
    <a loading="1" href="{{ orderlink }}">
        {{ content.getDescription('DE','EN') }}
    </a>
</p>

后:

<p>
    <a loading="1" href="{{ orderlink | addSessionId }}">
        {{ content.getDescription('DE','EN') }}
    </a>
</p>

因此,您仍需要浏览模板中的所有链接并添加它,以便进行会话。然后,该方法检查会话是否已附加,并将附加一次。

您也可以在另一个捆绑包中使用此扩展程序,只要您通过services.yml传递它。

希望有助于某人遇到同样的问题。