Signed request több Facebook tab-on és Suhosin

Ú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

Kövess minket!