Új Facebook játékunkat fejlesztem, és úgy döntöttem az eddigi gyakorlat helyett nem VPS-en fogom tárolni a programot, hanem normál tárhelyen szerverünkön. Egymás után két problémába is beleütköztem: először is mivel Facebook tab-on szerettem volna megjeleníteni az oldalt kezelnem kell a signed request paramétert, másodszor pedig a paraméter méretéből adódóan konfigurálnom kellett a Suhosint a tárhely szerveren.
Signed request kezelése több lapon
A signed request paramétert a Facebook a tabon futó alkalmazásoknak automatikusan szolgáltatja HTTP Post paraméterként. Ezt elég egyszerűen le is kérdezhetjük PHP-ból. Mivel én a Zend keretrendszert használom a Facebook PHP SDK-val, a paramétert egyszerűen lekérdezhetem:
$signed_request = $this->getRequest()->getParam('signed_request');
A probléma akkor keletkezik, amikor egy linkel az alkalmazásom másik oldalát akarom megnyitni. Az új oldalhoz a Facebook már nem adja automatikusan a signed request-et, így nem érhetők el az általa biztosított funkciók sem (pl. lájkolta-e az oldalt az aktuális felhasználó). Ahhoz, hogy a megnyíló oldalon is elérhető legyen minden, át kell adnunk a linkeken keresztül a paramétert. Ehhez először hozzáadom a view-hoz a paraméter, amiben utána hozzáfűzöm a linkekhez.
A controller osztályban:
$this->view->signed_request = $this->getRequest()-> getParam('signed_request');
A view-ban:
<a title="My title" href="<?=$this->baseUrl('/pic?signed_request='. $this->signed_request) ?>">
Suhosin get.max_value_length probléma
Minden rendes webszerveren van Suhosin. Amennyiben ezt alap beállítással használjuk a GET paraméterben átadható adat hossza nem lehet nagyobb 512 bájtnál, így az átadott signed_request paraméter hossza miatt nem fog továbbítódni a linkelt oldalra, mert általában túl hosszú. Érdemes a php.in fájlban felvenni magasabb értéket, legalább 1024 bájtot:
suhosin.get.max_value_length = 1024