Co mi Nette provedlo se sessions?

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

Na webu (hosting WEDOS) sem měl uplně easy aplikaci – přihlásím se, do $_SESSION[‚login‘] se dá true, na jiné stránce if ( $_SESSION[‚login‘] ) vypíše něco. Na začátku skriptu session_start();
Fungovalo to dlouhé měsíce.

Teď jsem tam nahrál aplikaci v Nette, která má v config neon:

	php:
		date.timezone: Europe/Prague
		session.save_path: "%tempDir%/sessions"
		# zlib.output_compression: yes

	nette:
		session:
			autoStart: smart
			gc_maxlifetime: 1209600

od té doby mi $_SESSION (v jiném adresáři/jiné aplikaci) nefunguje, resp v rámci 1 skriptu ano, ale session nepřežije redirect. Přitom aplikace v Nette funguje v pořádku, přehlédl jsem něco, co dělá Nette se sessions?

Jan Tvrdík
Nette guru | 2595
+
0
-

@SvvimX: Není to spíš tím, že ty aplikace sdílí stejnou cookie se session identifikátorem?

SvvimX
Člen | 65
+
0
-

Myslíš ten klíč v poli ‚login‘ nebo ještě něco jiného? klíče jsem zkusil měnit, tím to není.

Eště mi došlo, že jsem měl vypnuté error_reporting, takže web píše:

Warning: session_start() [function.session-start]: open(/data/web/virtuals/19209/virtual/session/sess_e51f53de09185cc1a130968b57c1d6c9, O_RDWR) failed: No such file or directory (2) in /data/web/virtuals/19209/virtual/www/domains/nhl.ondrej-sejvl.cz/index.php on line 6

Není to tím, že Nette si ukládá sessiony do svého adresáře? Přejme pak ta nastavení celý hosting?

Editoval SvvimX (21. 5. 2013 17:16)

petr.pavel
Člen | 535
+
0
-

Taky myslím, že to je tím, že Nette ukládá session do jiného adresáře, kdežto zbytek webu nadále hledá soubory session v adresáři starém. Prostě buď zakomentuj session.save_path v config.neon, nebo pro zbytek webu volej session_save_path().

Edit: Nebo jak naznačoval Honza, můžeš změnit název session cookie pro jedno nebo druhé. Z hlavy ti ale neřeknu, jak se to dělá.

Editoval petr.pavel (21. 5. 2013 17:24)

SvvimX
Člen | 65
+
0
-

hm, a jak se pak řeší např 2 aplikace v Nette na jednom hostingu? Protože to tam teď mám také :-) Vlastně mám 2 uplně stejné aplikace běžící paralelně, jedna v thesis.ondrej-sejvl.cz a druhá v ccm.ondrej-sejvl.cz jsou sice uplně stejné, ale postupně se budou měnit (ze začátku určitě jen DB, časem třeba i kód). všechno (a to včetně nette a dalších knihoven) mám prostě nakopírované 2× vedle sebe (ano, knihovny by mohly být jen jednou, ale to mě netrápí), obě aplikace vypadají, že fungují, je to tak tedy správně? Rozeberou si sessions pěkně, jak mají, když má každá nastaven ten save_path do svého tempu..?

iguana007
Člen | 970
+
0
-

Nastav si to jméno session a jak to uděláš, tak si smaž cookies a zkus si ty appky načíst znovu, imho ti to ten problém vyřeší.

Název lze nastavit v neonu:

php:
	session:
		autoStart: smart
		gc_maxlifetime: 1209600
		name: nejaky_identifikator
SvvimX
Člen | 65
+
0
-

dal jsem do obou Nette aplikací name: každé jinej :-) nicméně třetí ne-Nette aplikace nefunguje. Tak jsem jí před session start dopsal session_save_path( ) s cestou ke složce a všechny 3 subdomény fungují.

Šaman
Člen | 2666
+
0
-

Řešením je nastavit si alias. Pokud to nejde, tak změnit namespace (session.name). Mě to dělalo bordel doma, kde mám všechny aplikace na localu. Na ostrém serveru není většinou problém.

Editoval Šaman (21. 5. 2013 20:00)

SvvimX
Člen | 65
+
0
-

@Šaman alias čeho kam?

Localhostové aplikace mi kupodivu všechny fungují, nikdo nenadává, až teď na ostrém serveru se mi Nette změnilo session save path a ne-Nette aplikace hledala sessiony, kde neměla. Budu od teď dávat do configu session.name a pokud na jednom hostingu pojede víc aplikací, nastavím těm ne-Nette session save path.