2013-07-07 112 views
-2

如何在不使用cookies的情況下在Symfony2中驗證身份?如何生成一些像這樣的http://some.site/hello/roman?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f或這個http://some.site/9ebca8bd62c830d3e79272b4f585ff8f/hello/roman或其他一些始終可用的url,sessionid參數。感謝您的任何幫助。Symfony2,FOSUserBundle,禁用cookie驗證

+0

你真的很確定你想用url中的session-id進行身份驗證嗎?這對安全來說是最糟糕的事情。切勿在沒有https的情況下使用此功能,如果您希望進行簡單的URL身份驗證,則最好使用標準HTTP身份驗證。我真的不確定你所針對的客戶端設備不接受cookies ......這有什麼用途?請描述... – nifr

+0

@nifr,我明白所有的風險。但是這個任務是由顧客提出的。並且需要擺脫這種情況。 – r0ma

回答

0

你必須有兩件事。首先,您必須擴展會話存儲以從查詢參數中獲取會話。

namespace Elao\BackBundle\Session; 
use Symfony\Component\DependencyInjection\ContainerInterface; 
use Symfony\Component\HttpFoundation\Session\Storage\NativeFileSessionStorage; 

class Storage extends NativeSessionStorage 
{ 
    public function __construct($savePath = null, array $options = array(), ContainerInterface $container) 
    { 
     $request = $container->get('request'); 
     if ($request->query->has('sessionId')) { 
      $request->cookies->set(session_name(), 1); // We have to simulate this cookie, in order to bypass the "hasPreviousSession" security check 
      session_id($request->query->get('sessionId')); 
     } 
     return parent::__construct($savePath, $options); 
    } 
} 

來源:http://www.elao.com/blog/symfony-2/symfony-2-loading-session-from-query-param.html

下一個點,應更換UrlGenerator產生與會話ID PARAM每個URL。一個例子可以在this answer找到。

但是,正如評論中的nifr所說,這不是一個非常乾淨的要求。