Přihlášení facebookem (PHP SDK 5.0.0) a Session problém?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
flamengo
Člen | 135
+
0
-

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í:

  1. Session se zapíná automaticky, nebo se mýlím?
  2. 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
+
+1
-

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)

flamengo
Člen | 135
+
0
-

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 :)

Šaman
Člen | 2666
+
+1
-

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)