ugrás a tartalomhoz

Session file hossza

Thom · 2004. Jún. 19. (Szo), 18.41
Kérdés lenne, van-e tapasztalati érték egy session fájl maximálisan kezelhető fájlméretére?
Én egyszer teszteltem cookie fájlt, ~2,5kByte-t tudott max. kezelni Win98 rendszeren.
Mihez: egy szájton web-áruház készül. Minden boltnak saját bejelentkező processze van és önálló kosarakat használunk. A tag adatokat és a kosarak tartalmát is sessionokban tároljuk. Egyszerre fog a kliens több boltban is vásárolni így lehetséges, hogy egyes esetekben szokatlan hosszúra nőhet a session adatsor.
Köszi.

Thom
[ThomasWebMűhely] [ThomasPortál]
 
1

Cookie nem változó

Hojtsy Gábor · 2004. Jún. 19. (Szo), 19.09
A cookie nyilván nem változó hosszúságú, mert az mindig csak a session azonosítót tartalmazza. Különben mivel a session állományt a szerveren a PHP-nek be kell töltenie, és a memóriában kell tárolnia az adatait ($_SESSION), a PHP memória limitje lehet érdekes, ami alapesetben 8MB, de átállítható. Ezen kívül nem tudok limitről, ami a session adatokra vonatkozna.
2

Köszi

Thom · 2004. Jún. 19. (Szo), 19.14
Tehát, ha jól értem, alapesetben 8MByte adatot rendelhetek egy session azonosítóhoz. Ez több, mint elég - megnyugtatóan sok.
Köszi a gyors választ.

Üdv: Thom
[ThomasWebMűhely] [ThomasPortál]
3

Nem egészen

Hojtsy Gábor · 2004. Jún. 19. (Szo), 19.38
A PHP feldolgozó összesen 8MB memóriát foglalhat le alapértelmezésben. Ebben a memóriában sokmindent tárol, ami a szkript működéséhez kell. Nem csak a session adatokat.
4

ha a helyhiany annyira proble

zsepi · 2004. Jún. 20. (V), 01.02
ha a helyhiany annyira problema, miert nem tarolod az infot adatbazisban vagy file-ban?
5

A kérdés még fennáll

Thom · 2004. Jún. 20. (V), 10.32
ha a helyhiany annyira problema, miert nem tarolod az infot adatbazisban vagy file-ban?

Tkp. fájlban tárolom: a session fájlban. A böngésző csak az azonosítót kapja meg. Ha így nem menne, akkor nyitnék minden vásárlás kezdetén egy fájl a kosárnak. Csak ezt meg a lejárt fájlok törlése bonyolítja - lásd fentebb, több bolt van és valószínű nem mindegyikben fogja rendeléssel befejezni a vásárlást.
Külső adatbázist ebben az alkalmazásban nem használunk, a szükséges adattárolások adatfájlokba történnek.
Szerintem nem kell 8Mega, de elképzelhető, hogy néhány 10, néhány 100 kByte szükséges lesz. Nem találtam irodalmat a használható sessionfájlok max. méretére, ezért a kérdés a hasonló tapasztalatokról.
Az általam fentebb írt cookie - 2,5kByte adat kliens oldali javascriptes, kukis adattárolásra vonatkozott, ez tapasztalati adat. Ennyit volt hajlandó egy kuki fájlba max. beleírni, de ez a kliensen futott, adott opsys-nél.
Tehát a kérdés még fennáll: ha nem érvényes a 8MByte, akkor van-e infó, vagy tapasztalat, mekkora fájlméretű session fájlt hajlandó a kezelni a szerver+php?

Üdv: Thom
[ThomasWebMűhely] [ThomasPortál]
6

Mi ekkora?

Hojtsy Gábor · 2004. Jún. 20. (V), 11.03
Különben nem értem mimindent akartok beletenni a munkamenetébe egy szerencsétlen vásárlónak... Logikailag csak a termékek/szolgáltatások azonosítói lennének érdekesek. Nincs sok haszna minden tulajdonságukat felvenni a munkamenetbe...
7

Hmm... Úgy néz ki félreér

Thom · 2004. Jún. 20. (V), 11.22
Hmm... Úgy néz ki félreértés van.
Tehát: adott egy portál, benne több nagykereskedőnek saját területe (ezeket én alportáloknak nevezem). Minden nagykereskedőnek saját partneri adatbázisa van, a látogató egy látogatás során több helyre is bejelentkezhet. A termékadatok egy részét csak a partnerok láthatják, pl. a partneradatoknál nyilvántartott engedménnyel kalkulált árakat. Ha több helyre van egyszerre bejelentkezve, akkor össze tudja hasonlítani a nagykereskedők ajánlatait. Tehát egy munkamenetben több bejelentkezési adatot kell tárolni - csak az azonosításhoz fontosakat.
Ezenkívül a kosarak (kiválasztott termékek) adatait (árukód, változat, db...) is a sessionban tároljuk. Szerintem ezt is így szoktuk. Csakhogy itt több bejelentkezésről és több kosárról is lehet szó.
Pl. a számla- és szállító adatokat is megjegyezzük a későbbi gyorsabb űrlap kitöltés miatt, de azokat már a kliens gépére letett kukival.

Thom
[ThomasWebMűhely] [ThomasPortál]
8

Számlához kuki a legrosszabb szerintem

Hojtsy Gábor · 2004. Jún. 20. (V), 12.00
Kukiban egy sosession azonosító kell. A szerveren az állandóan nem szükséges adatokhoz is csak azonosítót kell tárolni. A számla és szállító adatokat gondolom nem kell minden oldalon elérni, és később (két hét múlva) is fel szeretnéd ajánlani a megjegyzett infókat. Ezért szerintem sem kuki, sem session nem jó megoldás rá, csak valami más szerver oldali adattár. Aztán amikor kell, egy azonosító alapján elő lehet venni.

Minél kevesebb fölös memóriát használsz minden szkript futásnál, annál gyorsabb lesz a szkript, és annál elégedettebb lesz a vásárló :)
9

Nos, ezeket én is így terve

Thom · 2004. Jún. 20. (V), 12.34
Nos, ezeket én is így terveztem, akkor kb. egyformán gondolkozunk.
A sessionban tárolt partneri adatok:
loginnév, mailcím(sok helyen felajánljuk űrlapba), jogosultsági szint(pl: partner, belső_munkatárs, editor..., mindegyik más tartalmat érhet el), bejelentkezett státusz(true/false)
tehát csak a legfontosabbak.
A kitöltött számla azonosító adatinak megjegyzésére legegyszerűbbnek a kliens kuki megoldást találtam. Tehát ennek nincs köze a sessionhoz, pl. $_COOKIE['data'] néven leteszem 30 nap lejárattal a gépére.
Erre a szerver adattárolás is megoldás lehet, még nincs eldöntve, de szerintem a kuki-s egyszerűbb.

Thom
[ThomasWebMűhely] [ThomasPortál]
10

Nincs itt félreértés

js · 2004. Jún. 20. (V), 12.37
A probléma két részből áll: az egyik a session holmi. Ide azt mondom, hogy sok mindentől függ: pl. a webszerver egy processzének odaadott maximális memóriától, a PHP egy futásakor odaadott max memóriától (ez az az ominózus 8MB), a betöltött PHP fájl és az annak lefordított bájtkódjától, és a PHP szkriptben felhasznált adatok hosszától (ide tartozik pl. a session információ is, és a cookie-k is). Jah, a session információ max hossza ugye attól is függ, hol tárolod ezeket. Ha fájlban, akkor a maximális fájlméret fontos lehet (pl. ne tedd win98 alá a produktív szervert). Ha adatbázisban, akkor a maximális LOB hossz lehet a szűk keresztmetszet.

Mindenesetre nem jó ötlet hatalmas adatokkal dolgozni, mert az jócskán megeszi a teljesítményt. A rossz kódokból meg csak az kér, aki nem tudja, hogy a kóklereket kíméletlenül el kell hajtani. Én pl. nem tárolnék 300k-t sem a session-ben.

A másik félreértés abból eredhet, hogy a számla- és szállítóadatok cookie-kben vannak. Szerintem ezeket egyszerűen bele kell rakni az adatbázisba. Hiszen egyrészt a cookie adatbázis a kliensen bárki számára olvasható (már azok olvashatják, akik a klienst használhatják), és nem hordozható (pl. más gépről bejelentkezve nincs ott a megszokott cím). Ide az is bejátszik, hogy a nagy worm hullámok miatt már csak az nem törhet be a windows kliensekbe, aki nem akar. Egy szerverbe már sokkal ritkábban törnek be, mint az azt használó kliensekébe átlagosan.
---jul
11

Köszi a hasznos válaszokat.

Thom · 2004. Jún. 20. (V), 13.09
Köszi a hasznos válaszokat.
Jelenleg ennek a modulnak az egy-felhasználós változata határidős, ezt - azt hiszem - megcsinálom az eredeti módon: sessionban a bejelentkezés és a kosár. Így még nem lesz túl hosszú a session fájl, és ez már megvan írva.
A kérdéseimmel a modul továbbfejlesztésére gondoltam. Multiportálos rendszernél (több kereskedő ajánlatai egy portálon belül önálló alportálokban) meggyőztetek a kosár-adatok adatbázisos tárolásáról, csak ehhez a meglévő adatkezelésben is sok mindent módosítani kell - ez már egy következő történet lesz.
A számla adatok tárolása pótlólagos funkció lehet, de itt is igaza lehet 'js'-nek.

Üdv: Thom
[ThomasWebMűhely] [ThomasPortál]