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

symfony2将会话Id作为GET参数附加到Url,symfony,Symfony,我觉得我的问题太基本了,我找不到关于它的信息 在我们的symfony2应用程序中,我们希望将sessionId作为GET参数附加到每个Url,例如。 我们想用它来识别调试用户,也可以识别不允许在浏览器上使用cookie的用户 我怎样才能做到这一点?有没有什么好办法?还是我必须开发一个类来附加会话?也许是个倾听者 为了澄清我的问题: :我正在寻找一个中心位置,让我的应用程序始终将get参数附加到每个呼叫 当前位置我正在寻找正确的地方再次阅读(尽管我想我会使用我同时找到的一个听众) 我们正在Apa

我觉得我的问题太基本了,我找不到关于它的信息

在我们的symfony2应用程序中,我们希望将sessionId作为GET参数附加到每个Url,例如。

我们想用它来识别调试用户,也可以识别不允许在浏览器上使用cookie的用户

我怎样才能做到这一点?有没有什么好办法?还是我必须开发一个类来附加会话?也许是个倾听者

为了澄清我的问题:

  • :我正在寻找一个中心位置,让我的应用程序始终将get参数附加到每个呼叫

  • 当前位置我正在寻找正确的地方再次阅读(尽管我想我会使用我同时找到的一个听众)


  • 我们正在Apache服务器上使用Symfony 2.7。

    我们最终解决了这个问题,具体如下: 我们已经有了一个类来扩展细枝功能。它位于文件夹../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将其传递到那里


    希望这能帮助遇到同样问题的人。

    我认为使用请求事件侦听器是可能的。但是我会重新考虑几次
    谁不允许浏览器上有cookies
    。有多少用户这样配置他们的浏览器?足够多的人去考虑它。但无论如何,出于调试目的,我们都需要它。您知道,在这种情况下,当产品团队说“此用户与我们的应用程序有问题”时,sessionId通常是确定“此用户”是谁以及他做了什么的唯一方法。将会话ID放入日志如何?当然,会话ID也会放入日志中。但是,如何将智能手机浏览器的视图连接到匹配的日志条目?我需要url中的一个参数来标识用户。我们决定它应该是会话id,我正在研究一种聪明的方法来实现它。你不怕它会让你的应用程序受到CSRF攻击吗?