2016-04-06 8 views
1

私の質問はとても基本的なので、私はそれに関する情報を見つけることができません。symfony2 GETパラメータとしてURLにセッションIDを添付してください

symfony2アプリでは、すべてのURLにsessionIdをGETパラメータとして添付したいと思います。 http://example.com/blog/?sid=28397497523423irzeuw96ft73rzifr67tw

デバッグのためにユーザーを識別するために、またブラウザでCookieを許可しないユーザーを識別するために使用します。

どうすればこの問題を解決できますか? Symfonyの方法はありますか?または、セッションを添付するクラスを作成する必要がありますか?おそらくリスナーですか?

  1. ::私は私のアプリは、常に各呼び出しにGETパラメータを添付持っている中心的な場所を探しています私の質問を明確にする

  2. :(私は私がその間たリスナーを使用すると思いますが)私たちはApacheサーバ上のSymfony 2.7を使用している

再びそれを読むための正しい場所を探しています。

+0

リクエストイベントリスナーでも可能だと思います。しかし、私は「ブラウザでクッキーを許可しない」という数倍のことを再考したい。どのように多くのユーザーがブラウザをこのように設定しましたか? – eRIZ

+0

十分な人はそれを考慮する。とにかくデバッグのために必要になります。あなたは、プロダクトチームが来て、「このユーザーは私たちのアプリに問題がありました」という状況があることを知っています。セッションIDは、通常、「このユーザー」が誰であるか、彼が何をしたのかを知る唯一の方法です。 –

+0

セッションIDをログに記録するのはどうですか? – goto

答えて

1

最後にこれを解決したのは以下の通りです: すでにTwigの機能を拡張するクラスがあります。我々はを変え小枝ファイルで

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; 
} 

(と私は本当にそれを避けるために望んで):それは私たちがメソッドを持っているフォルダ../OurBundle/Twigに常駐し、そこ

class CoreExtension extends Twig_Extension implements Twig_Extension_GlobalsInterface {.... 

と呼ばれています次のようなliks:

<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

希望経由限り、あなたはそこにそれを渡すよう別のバンドルでこの拡張機能を使用することができます。

関連する問題