Jak funguje setExpiration?
 
- bicekz
- Člen | 20
Zdravím,
v presenteru jsem chtěl přidat checkbox pro zapamatování si uživatele při logování. Při následném zpracování ho zpracuji takto:
<?php
if($values->zapamatovat)
	{$this->user->setExpiration('14 days',FALSE);}
else
	{$this->user->setExpiration('30 minutes',TRUE);}
?>Podle kontrolních výpisů se dostanu tam, kam mám. 30 minutová doba by mohla být ok, ale 14 denní vyprší max za pár hodin. Nehledě na to, že jsem v místním článku vůbec nezjistil, co udává druhý parametr. Našel jsem to takto u někoho na fórum, tak jsem to vložil podle něj.
Co tam mám špatně?
Díky.
 
- David Matějka
- Moderator | 6445
ta expirace přihlášení je ještě omezená expirací session. pokud je tedy expirace session (určená parametrem session.gc_maxlifetime) nižší než 14 dní, tak i přihlášení vyprší dříve.
druhý parametr můžeš smazat, používal se pro to, jestli se má uživatel odhlásit po zavření browseru. vzhledem k tomu, že browsery významně změnily, jak se to chová, tak to postrádalo smysl a ten parametr byl odebrán.
 
- duke
- Člen | 650
Session můžeš zpravidla nastavit i přes Nette. Mělo by stačit přidat do configu:
session:
	expiration: 14 days
	save_path: %tempDir%/session
Tu save_path je důležité tam mít v případě, že na stejném serveru běží více aplikací, neboť jiná aplikace si může nastavit kratší expiraci a pak to bude promazávat ten adresář častěji, čímž to ovlivní i ty ostatní aplikace.
 
- duke
- Člen | 650
@MajklNajt Pokud vím, PHP provádí garbage collection (promazávání starých souborů) při inicializaci session automaticky s určitou pravděpodobností, která se dá nastavit (viz session.gc_probability).
@bicekz Ten adresář session v (v daném případě:
app/../temp/session, ale můžeš si tam nastavit klidně i jiné
umístění) musíš ručně vytvořit a nastavit mu práva pro zápis
uživateli, pod kterým jede php.
 
- MajklNajt
- Člen | 517
@duke áno, ale nepozerá pri tom na konfiguráciu Nette, čiže ak máš na 1 serveri viac Nette aplikácií, v jednej nastavíš exspiráciu 14 dní a v druhej 30 dní, garbage collector pozerá na expiráciu nastavenú v php.ini, a (by default) nepozerá do individuálne nastavených priečinkov pre ukladanie sessions.
EDIT: teda takto to funguje na mojich serveroch s Debianom 9
Editoval MajklNajt (14. 4. 2019 19:41)
 
- duke
- Člen | 650
@MajklNajt Debian je v tomto specifický. Na debianu je ve výchozím nastavení PHP funkcionalita pravděpodobnostního spouštění garbage collectoru po každé inicializaci session vypnutá a o promazávání session se stará speciální skript spouštěný cronem. A ano, zdá se, že tento skript bere v potaz jen adresář nastavený v php.ini, jak říkáš.
Něco víc k tomu (v angličtině) zde.
 
- MKI-Miro
- Člen | 281
Ahojte
prešiel som viacero vlákien ale nenšail som odpoveď v čom by mohol byť problém u mňa:
Prihlásenie mi vyprší za pár hodín napriek tomu že mám nastavené 14 days
config.neon
session:
	expiration: 14 days
	save_path: "%tempDir%/sessions"
	save_handler: files
signInForm
$this->user->setExpiration($values->remember ? '14 days' : '20 minutes');
php settings na websupport.sk
Session Support	enabled
Registered save handlers	files user memcache
Registered serializer handlers	php_serialize php php_binary
Directive	Local Value	Master Value
session.auto_start	Off	Off
session.cache_expire	180	180
session.cache_limiter	nocache	nocache
session.cookie_domain	no value	no value
session.cookie_httponly	0	0
session.cookie_lifetime	0	0
session.cookie_path	/	/
session.cookie_samesite	no value	no value
session.cookie_secure	0	0
session.gc_divisor	10000	10000
session.gc_maxlifetime	21600	21600
session.gc_probability	1	1
session.lazy_write	On	On
session.name	PHPSESSID	PHPSESSID
session.referer_check	no value	no value
session.save_handler	memcache	memcache
session.save_path	/apachetmp/sessions	/apachetmp/sessions
session.serialize_handler	php	php
session.sid_bits_per_character	4	4
session.sid_length	32	32
session.upload_progress.cleanup	On	On
session.upload_progress.enabled	On	On
session.upload_progress.freq	1%	1%
session.upload_progress.min_freq	1	1
session.upload_progress.name	PHP_SESSION_UPLOAD_PROGRESS	PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix	upload_progress_	upload_progress_
session.use_cookies	1	1
session.use_only_cookies	1	1
session.use_strict_mode	0	0
session.use_trans_sid	0	0
mam nastavené niečo zle?
Ďakujem
 
- MajklNajt
- Člen | 517
MKI-Miro napsal(a):
a teda cesta ako dosihnut 14 days nie je ziadna? (websupport zdielany hosting)
veď keď to máš nastavené na 6 hodín
session.gc_maxlifetime  21600   21600, tak ako chceš z toho
spraviť 14 dní? obráť na na ws, nech ti to upravia resp. niektoré
direktívy PHP sa dajú nastaviť aj cez administráciu, ale či aj toto, to
netuším
