2009-09-17 46 views

回答

1

引述manual page of the FlashMessenger

FlashMessenger助手允許你 傳遞信息,用戶可以 需要看到下一個請求。到 完成此操作,FlashMessenger使用 Zend_Session_Namespace來存儲 消息未來或下一個請求 檢索

因此,消息存儲在會話中 - 並且會話附加到/對應於用戶;實際上是當前用戶。

會話並不意味着被不同用戶之間共享的存儲數據 - 所以我要說的是,該組分不能用於以將事件通知的其他用戶;至少不是本地的。


一個可能的解決辦法是:

當你發現有必須去其他用戶,它的一些表的外鍵指向存儲在數據庫 (到目標用戶的消息
  • ,如果目標用戶是連接用戶;某個表存儲該消息,如果任何人都可以看到)。
  • 在每個頁面上,您檢查該數據庫表是否必須顯示該消息
  • 如果是,則將其放入FlashMessenger中,該FlashMessenger將在當前用戶的下一頁加載中顯示它。

有點棘手,並沒有那麼容易,因爲你希望,我承認......

另一個想法,而不是使用一個數據庫,是使用一些緩存引擎(如APC,memcached的......看到Zend_Cache,避免碰到DB。

玩得開心!

+0

偉大的東西帕斯卡。我打算使用數據庫,但我認爲你使用z_cache是​​正確的。 – Sledge 2009-09-17 17:12:19

+0

感謝:-)請注意:使用緩存意味着您的郵件永遠不會到達目的地:緩存手杖過期,並且如果緩存中沒有剩下位置,緩存引擎很可能會刪除一些舊/未使用的條目 - 但是,一般來說,如果你的信息不重要,這將是OK的。 – 2009-09-17 17:55:31

0

其他選項將implemment自己的會話處理並將其存儲在DB(與用戶名一起)。然後,您可以訪問它並以任何方式改變它。當我們需要克服一些瘋狂的限制時(我們已經實現了這個) e日有限會話生命週期)託管環境的會話設置。它工作的非常好,並提供了更多的可能性在默認實現(如簽出所有用戶,如果某些特定的用戶登錄 - 例如superadmin或登錄用戶,如果他的密碼在管理部分更改等)。

但我想這是你的目的有點大材小用。而帕斯卡的方式就足夠了。

相關問題