2010-02-08 117 views
1

在我們的網站中,我們有一個登錄按鈕,每當有人登錄按鈕變成「註銷」,用戶名稱顯示在旁邊。我們的服務器設置使用了Varnish,所以我們設計了一種方法,讓一些javascript執行POST操作,並檢查用戶是否已通過身份驗證。應用程序外的Symfony會話?

爲了避免服務器開銷,我認爲只需創建位於網站根/checkuser.php中的腳本並嘗試在那裏讀取會話變量(我們讓Varnish不緩存該文件)就會很簡單。這樣我們可以繞過所有需要加載的類來檢查這個用戶會話。

不過,長話短說,checkuser.php中的會話總是空的。如果我使用$ user-> getAttribute檢查它是否有效。怎麼辦?

回答

3

好的,我明白了。 Symfony以自己的名義使用它的會話。如果你想使用會話您的應用程序外(或框架),你可以得到會話就像這樣:

session_name('symfony'); 
session_start(); 
var_dump($_SESSION); 

當然條件是你沒有在factories.yml文件

THX重命名會話名稱prodigitalson的幫助。

0

你使用了什麼會話映射?我相信,Symfony的使用空間中,因此沒有什麼是永遠在會話的頂層...例如,你可能有:

$_SESSION = Array(
    symfony = Array(
    sf_user => $userSessionValues 
    sf_debug => $debugValues 
) 
) 

我不記得實際的結構,但這樣做在$ _SESSION一的print_r或後續代碼var_dump(從可以肯定的是,他們應該給你這片土地以便說話。

+0

var_dump($ _SESSION); 給出: null 但是從sf中我得到了預期的結果...... – Marc 2010-02-08 14:59:20

+0

有意思......並且你從獨立腳本中調用了'session_start()'和所有爵士樂,對嗎? – prodigitalson 2010-02-08 15:08:06

+0

yes ... session_start()是第1行,var_dump($ _ SESSION)是第2行。 我正在嘗試像symfony那樣獲取sessionid來掛鉤那個會話......但目前還沒有... :( – Marc 2010-02-08 15:15:20

1

一個更復雜的(我不會說好,因爲它只有更好,如果你需要額外的功能)的方式來做到這一點是做這樣的事情:

require_once($_SERVER['DOCUMENT_ROOT'].'/../config/ProjectConfiguration.class.php'); 

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false); 
$context = sfContext::createInstance($configuration); 

if ($context->getUser()->isSuperAdmin()) { 
    "do something"; 
} 

if ($context->getUser()->hasCredential('something')) { 
    "do something else" 
} 

這種方式的優點是如您所見,您可以使用symfony中更復雜的方法,而不僅僅是查看原始會話數據。

(從http://benlumley.co.uk/2009/05/24/hook-into-symfony-authentication-from-external-script-fckeditor/解除)