Problém s nette Picasa Web Uploader
8. 12. 2009 14:22 | PHP
Měl jsem jeden technický problém. Pokouším se pomocí nette implementovat fuknčnost pro upload fotek z Picasy pomocí Picasa Web Uploader API. Ve stručnosti to funguje tak, že Picasa otevře ve svém okně svůj vlastní minibrowser a načte zadanou URL. Navíc předá pomocí POST parametr, obsahující seznam nahrávaných fotografií ve formátu RSS. Na základě tohoto parametru vyrenderujete formulář, po jehož odeslání se fotografii pošlou přes POST na váš server.
Aby toto šlo provést, obsahuje Picasí minibrowser jednu zvláštní funkcionalitu a to tu, že input definovaný jako
<input type="hidden" name="http://localhost:1234/picture123.jpg" />
bude zpracován tak, že se obsah příslušného souboru pošle jako součást POST požadavku.
Kde je problém?
Vše funguje tak jak má až na jednu vyjímku. Při zpracování závěrečného formuláře se náhle ztratí všechna session data. Pátral jsem po příčině a dospěl jsem k závěru, že na vině je náhlá změna User-agent informace v hlavičce požadavku, kterou nette vyhodnotí jako podvrh a session smaže.
Řešením je v nette zakázat kontrolu agenta. Do bootstrapu přidejte následující podmníku
//Zabezpečení Galerie if (strpos(Environment::getHttpRequest()->getHeader('User-Agent'), 'Picasa') !== null) { Environment::getSession()->verificationKeyGenerator = null; }