Ukládání sessions ve filesystemu

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

Napadlo mě, že by bylo vhodné se zamyslet nad nějakým lepším systémem ukládání sessions, který by zabránil, že se vyskytne v jedné složce tisíce souborů… které je pak někdy dost nemožné mazat…
Na serveru s velkým trafficem a v „horším případě“ s nastavenými sessions na dlouhou dobu taková skutečnost může nastat dost hravě…

Vím třeba že e-shop systém Magento (co jede na Zendu) to má řešené dělením do složek dle prvních dvou písmen… např. z následujícího:

i59ouvn8jlibdrh5eu6uvoooh2
ir4v70lbg33d98s9tsv9pv92g3
cflkik8nqpqojb49mn6arq6302
j0cv0r0hf7i684d52vhemr8805
ir6kulj9eudtr0am5bm57aib67
irt8tn4ld6etqeof3kj26iitp0

by vzniklo následující:

/i5/i59ouvn8jlibdrh5eu6uvoooh2
/ir/ir4v70lbg33d98s9tsv9pv92g3
/ir/ir6kulj9eudtr0am5bm57aib67
/ir/irt8tn4ld6etqeof3kj26iitp0
/cf/cflkik8nqpqojb49mn6arq6302
/j0/j0cv0r0hf7i684d52vhemr8805

Existuje už něco takového v Nette? Klidně bych se do toho pustil, ale nechci mít pocit, že znova vynalézám kolo :-)

David Grudl
Nette Core | 8218
+
0
-

Existuje ;-) $session->setSavePath('2;/sessions/');

mcmatak
Člen | 504
+
0
-

open(x:\web/../app/../data/sessions\2\u\sess_2umjmrqhg5anf0flg61qo47ri0, O_RDWR) failed: No such file or directory (2)

asi mi něco uniklo, máte někdo použitelný překlad?

In order to use N you must create all of these directories before use.

jako že si mám ty adresáře dopředu vytvářet? coto?

session.save_path defines the argument which is passed to the save handler. If you choose the default files handler, this is the path where the files are created. See also session_save_path().

There is an optional N argument to this directive that determines the number of directory levels your session files will be spread around in. For example, setting to ‚5;/tmp‘ may end up creating a session file and location like /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If . In order to use N you must create all of these directories before use. A small shell script exists in ext/session to do this, it's called mod_files.sh, with a Windows version called mod_files.bat. Also note that if N is used and greater than 0 then automatic garbage collection will not be performed, see a copy of php.ini for further information. Also, if you use N, be sure to surround session.save_path in „quotes“ because the separator (;) is also used for comments in php.ini.
Warning

If you leave this set to a world-readable directory, such as /tmp (the default), other users on the server may be able to hijack sessions by getting the list of files in that directory.

Note: Prior to PHP 4.3.6, Windows users had to change this variable in order to use PHP's session functions. A valid path must be specified, e.g.: c:/temp.

srigi
Nette Blogger | 558
+
0
-

nj musis tu strukturu adresarov vytvorit. Ak si si vsimol z tej dokumentacie, tak meno adresara je castou toho ID. Cize musis vytvorit vsetky mozne kombinacie. Od toho su v dist. PHP tie skripty, co so spravia za teba.

mcmatak
Člen | 504
+
0
-

plus jestli se mi zda tak ono to samo necisti, takze si to musim cistit ve vlastni režii? tzn. shrnuto, je tohle nepoužitelné?

srigi
Nette Blogger | 558
+
0
-

Otazkou je potom, ci je nepouzitelne 10000 suborov v jednom addr (a pripadne zabity vykon na vytazenom serveri), alebo managment takejto struktury. Osobne si myslim, ze napisat skript co premaze nejaku vetvu/casove-obdobie je jednoducha zalezitost.

Filip Procházka
Moderator | 4668
+
0
-

úkol jako stvořený pro Nette\Finder :)

mcmatak
Člen | 504
+
0
-

a jak se to bude spouštět? ručně nebo cronem? takže pro každý web budu vytvářet další crony? nehledě na to, že neexistence dir jednoduše způsobí pád aplikace, takže když z nějakého důvodu zmizí, např. chytrý panel v debug baru co maže sessions atd… no moc se mi to nelíbí

jestli by nebylo jednodušší zachytávat pád a dir vytvořit v nette, ale byla by to další vrstva navíc no

mcmatak
Člen | 504
+
0
-

btw. k tomu množství souborů, jednou jsem se o tom bavil s jedním rusem co dělá nějaký filesystem, a prý dnešní moderní filesystémy ext3 atd. krom prý RaiserFS který je nějaký na …, tak není problém ve výkonu v XY desítkách tisíc souborů, je to prý díky B+ tree či co… do toho nevidím

samozřejmě vždy se také snažím produkty, články a další obrázky ukládat do chunků, neříkám, že tomu věřím, ale dnes už je to prý zbytečná preoptimalizace

David Grudl
Nette Core | 8218
+
0
-

Zatím jsem to nikdy nepoužíval, ale asi bych to řešil tak, že bych si adresář vytvořil před nastartováním session podle tvaru session id v cookie. Samozřejmě chce to zkontrolovat správný tvar téhle cookie. A mazání lze řešit cronem.

mcmatak
Člen | 504
+
0
-

nj ale to je právě ono, představ si že máš systém který dokola kopíruješ a přibyde ti další potřeba někam zadávat cron a teď na něj zapomeneš no… s každým požadavkem testovat jestli dir existuje se mi moc nelíbí … přijde mi to lepší v nette zachytávat … když nette chytne exception že dir není zapisovatelný … ale chápu že je to další vrstva (možná zbytečná) … zatím jsem se rozhodl to nepoužívat … i když některé weby by si to asi zasloužili podle obav které tady slyším, nasekat tak velké množství sessions není velký problém na navštěvovaném webu, zvlášť když expir. je měsíc

Dragon Jake
Člen | 20
+
0
-

nehledě na to, že pak webhosteři často nadávají, když jim zálohovací skripty běží půl dne

cuga
Člen | 210
+
0
-

no hlavne pocet souboru v adresari nekde chytre omezujou, takze kdyz sem zapomnel prenastavit expiraci z dvou tydnu, tak mi behem tydne hosting zarval quota exceeded a zariznul stranky :) docela vesela udalost…