2011-07-01 56 views
1

最近,我被要求將XML API添加到我的項目中的一個Symfony模塊。我做到了,而且效果很好。爲了驗證,我們使用sfGuardPlugin。 Symfony版本是1.3.11。使用推進,而不是學說。sfGuardPlugin會話:如何通過wget重用它 - 或將SID映射到sfGuardUser

最近的請求對我來說是這樣的:

  1. 我們將嵌入一個Flash遊戲到網站。
  2. Flash將對XML API執行請求。
  3. 編寫Flash應用程序的人說,它不會與瀏覽器共享cookie。
  4. 我們希望Flash能夠重用當前登錄用戶的會話(如果沒有用戶登錄,我們將不允許顯示)。

我沒有嘗試這個潛在的解決方案:

  1. 我被告知,Symfony的會話駐留在symfony Cookie(由其他SO文章和各種谷歌的搜尋結果)。
  2. 有人告訴我,如果我在另一個客戶端複製此值(在我的情況,wget)做session_id("stolen_session_id")我將能夠複製的會議,具有相同的用戶登錄等
  3. 這橫空出世是錯的。說我的cookie symfony具有「blabla」的價值。我這樣做了:wget --post-data='session_id=blabla' X.X.X.X:NN/api/bla.xml -O-。我的服務器PHP代碼分析此POST參數並將其提供給session_id函數。然後在日誌中報告session_id('blabla')正在返回1。然而,致電$this->getUser()->getGuardUser()返回null

我需要一種方法來傳遞一個映射session_id到有效sfGuardUser或找到重用已存在會話的備用方法。

假設我可以完全訪問cookie。我想知道他們中的哪一個(或所有人?)爲了實現這一點而複製。

順便說一句,我看到在我的Chrome開發工具中,symfony Cookie屬於會話類型。所以毫無疑問,爲什麼我的方法不起作用,但是我在使用sfGuardPlugin的同時在Symfony中如何做到這一點,我一點也不知道。

我知道這不是最明智的問題之一,但同樣,我只需要幫助。

感謝您的時間。

(Dimitar P.)

哎呀,忘了提,我看到我的域名這餅乾:

  • symfony的
  • sfRemember
  • __utma
  • __utmb
  • __utmc
  • __utmz

不過,我猜最後四項是針對Google Analytics的。

回答

0

我並不想這樣做,但我無法找到其他替代品:

$ wget --header='Cookie: symfony=blabla' X.X.X.X:NN/api/bla.xml -O-

我希望我的XML API是REST,但顯然,Symfony的不允許認證的請求除了使用cookie之外的其他方式(並且使會話ID始終包含在URL中並不是的全部)。

儘管如此,如果有人用完全REST的替代品出現,我會提高他/她的答案。

+0

好吧,我等了很長時間,以便有人回答我的問題並得到他的15位代表,但是由於沒有人出現了,我會接受我的回答。 ;) – dimitarvp

0

您需要某種方式來指定哪個用戶正在執行(wget)請求。而PHP會話默認使用會話ID。

執行此操作的常用方法是基於標記的身份驗證。實現這一目標的最常見方法是OAuth,它有很多默認庫(Symfony和API用戶都使用)。

如果您是唯一使用此API的人,您還可以爲每個用戶每個會話創建自定義標記(隨機sha1字符串)(您可以將其存儲在數據庫中的某個位置)。現在你可以創建類似`wget XXXX:NN/api/bla.xml?token = asdfhdsfhf

+0

感謝您的建議。可悲的是我正在使用傳統軟件。無法做很多改變。 – dimitarvp