Přihlášení facebookem (PHP SDK 5.0.0) a Session problém?
- flamengo
- Člen | 135
Mám problém, který nedokáži rozlousknout. Klasické přihlášení facebookem: kliknu na tlačítko, odsouhlasím podmínky fb aplikace a dle úspěšného fb ověření se přihlásím $this->user->login($user_id). Pro přihlášení do Nette mám vytvořený vlastní facebook autentikátor.
Na fb mám vytvořeny 2 aplikace, jednu pro testování na localhostu a jednu pro produkční server. Problém je v tom, že občas to funguje a občas ne.
Localhost (vývojová verze, Nette 2.3.3, PHP 5.5.8.)
Na localhostu se v pořádku přihlásím, vše funguje (testováno na
počítači v prohlížečích Firefox a Chrome).
Produkční server na subdoméně (PHP 5.6.12)
Před testováním vymažu cache a pro jistotu i session.
- Přihlásím se na počítači pomocí Firefoxu na počítači, funguje.
- Přihlásím se na počítači pomocí Chromu, nefunguje.
- Přihlásím se na mobilu pomocí Opery, funguje.
- Když požádám kolegu, aby otestoval na svém počítači, tak pomocí Chromu nefunguje. Na mobilu mu rovněž nefunguje.
Chyba je stále stejná:
Facebook\Exceptions\FacebookSDKException
Sessions are not active. Please make sure session_start() is at the top of your
script. in
/www/app/components/Facebook/PersistentData/FacebookSessionPersistentDataHandler.php:50
Ve třídě FacebookSessionPersistentDataHandler se jedná o tuto část kódu:
public function __construct($enableSessionCheck = true){
if ($enableSessionCheck && session_status() !== PHP_SESSION_ACTIVE) {
throw new FacebookSDKException(
'Sessions are not active. Please make sure session_start() is at the top of your script.',
720
);
}
}
Nechápu pár věcí:
- Session se zapíná automaticky, nebo se mýlím?
- Není mi jasná různorodá funkčnost/nefunkčnost pro různé prohlížeče (Firefox, Chrome) a zařízení (počítač, mobil).
Napadá vás někoho, kde je zakopaný šotek? Předem díky za reakce.
Editoval flamengo (3. 9. 2015 12:01)
- Jiří Nápravník
- Člen | 710
V Nette se defaultně zapíná session až když je potřeba, ale nejspíše když je potřeba v rámci nette, ne klasické zavolání nad session php funkcemi. Zkus do neon dát:
session:
autoStart: true
Anebo ještě lépe, použij kdyby/facebook
Editoval Jiří Nápravník (3. 9. 2015 17:16)
- Šaman
- Člen | 2666
flamengo napsal(a):
Díky za odpověď, nyní funguje.
session: expiration: 14 days autoStart: true
Nicméně by mne stejně zajímalo, jak je možné, že v některém prohlížeči to fungovalo a v některém ne, takže kdyby někdom věděl, sem s tím :)
Aby to bylo ještě zajímavější, tak můžeš zkusit, jestli ti to bude fungovat na strojích, kde to dřív nefungovalo, po přihlášení.
Nette si startuje session až/pokud jsou potřeba. Ta funkce šla mimo Nette,
takže pokud nebyly nastartované, tak je neměla k dispozici.
A Nette je potřebuje třeba kdykoliv na stránku přijde již přihlášený
uživatel (info o identitě jsou v session), ale nepotřebuje je pro nového
návštěvníka. Takže možná nejde ani tak o prohlížeč, ale o to, jestli
už máš v tom prohlížeči nějaká cookies se sessionID daného
sezení.
Pokud používáš session v Nette, tak se většinou nemusíš o nic starat a všechno si pořeší framework.
Editoval Šaman (3. 9. 2015 14:12)