你必須有兩件事。首先,您必須擴展會話存儲以從查詢參數中獲取會話。
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所說,這不是一個非常乾淨的要求。
你真的很確定你想用url中的session-id進行身份驗證嗎?這對安全來說是最糟糕的事情。切勿在沒有https的情況下使用此功能,如果您希望進行簡單的URL身份驗證,則最好使用標準HTTP身份驗證。我真的不確定你所針對的客戶端設備不接受cookies ......這有什麼用途?請描述... – nifr
@nifr,我明白所有的風險。但是這個任務是由顧客提出的。並且需要擺脫這種情況。 – r0ma