Overeni mezi requesty dle Session ID nebo IP?
- Jan Mikeš
- Člen | 771
Zdravim,
potrebuji realizovat jednoduchou chatovaci aplikaci ala technicka podpora. Potrebuji zajistit, aby kazdy zakaznik/navstevnik mel unikatni chat a admin po prihlaseni mohl odpovidat.
Jde mi o to, jak overovat ze se jedna o toho sameho cloveka, vaham jestli pouzit https://api.nette.org/…Session.html#… ale konkretne tohoto: „Don't make dependencies, can be changed for each request.“ se mirne obavam.
Nebo se spolehat na https://api.nette.org/…Request.html#… (klasicka IP adresa)?
Potrebuji spolehlive poznat, zda se jedna jednoho a toho sameho uzivatele i mezi requesty – chat se bude ukladat normalne do db spolecne s IP nebo Session id (podle toho co mi doporucite).
Osobne se domnivam ze IP bude spolehlivejsi, rad bych slysel ale i nazory Vas, zkusenejsich.
Editoval Lexi (22. 2. 2013 14:11)
- enumag
- Člen | 2118
Session ID určitě ne, jak jsi sám již zjitil Nette ID často dle potřeby regeneruje kvůli zabezpečení proti session fixation apod.
IP nemusí být dostačující pokud se připojilo více uživatelů z jedné IP adresy. Co takhle použít kombinaci IP a User-agent?
EDIT: Po diskusi s @Majkl578 a @brabijan na jabberu bude lepší použít session a to tak že někam do session uložíš uživateli nějaký náhodně vygenerovaný identifikátor. Tzn injectneš session, tam si uděláš vlastní section a tam mu vygeneruješ ID podle kterého jej později poznáš. Kdyžtak dokumentace session by ti měla pomoct. ;-)
Editoval enumag (22. 2. 2013 14:26)
- Jan Mikeš
- Člen | 771
Dekuji za nazory.
S pouzitim session problem nemam – jde mi jenom o to jak rozeznat unikatni uzivatele a udrziet si jejich identitu po dobu jejich pritomnosti.
Libi se mi oba zpusoby, otazka je pouze ktery je spolehlivejsi – uzivatel si muze v prohlizeci vymazat cookies (sice nevim proc by to delal) a jeho komunikace bude pryc.. (fyzicky bude ulozena v databazi, ale on uz nebude mit moznost se k ni vratit), z tohoto hlediska si rikam ze jistejsi je reseni od @enumag
- hAssassin
- Člen | 293
@Majkl578: pokud to byla reakce na me, tak sem nemyslel „odkud“ ale „odkud“, cili jak ji generovat aby byla skutecne unikatni.
@enumag: jo, to me taky napadlo, a asi to unikatni bude, ale nejaka pravdepodobnost stejne asi existovat muze, ze se vygeneruji dva stejny retezce pro dva jiny lidi a pak to kixne na tom, ze ten druhej „vstoupi“ do konverzace toho prvniho a to muzu byt pruser velikansky (zalezi teda o cem ta komunikace byla).
- Majkl578
- Moderator | 1364
Já vás asi nechápu.
Zkusím to popsat v krocích, tak, jak to myslím.
- Uživatel přijde na web. Tím zároveň získá session s platností např. 30 dní.
- Chvíli web používá a následně se v něm ztratí a bude chtít pomoci.
-
- Začne chat. Tím se někde v databázi vytvoří záznam o konverzaci (předpokládejme tabulku conversations). Tento záznam bude mít unikátní ID (tím je primární klíč, ID konverzace).
- Výše uvedené ID se uloží do session uživatele.
- Oba si následně pokecají, jejich zprávy padají někam do tabulky conversations_messages.
- Uživatel je happy a jde surfovat dál.
- Po půl hodině ale zabloudí znovu a chce si o tom popovídat.
- Začne znovu chat. Jelikož ale v session existuje ID konverzace (vytvořené v bodě 3b), nezaloží se nová konverzace (tj. přeskočí se body 3a a 3b), ale pokračuje se v existující na základě daného ID (bod 4).
- Repeat. Profit.
Nebo mi něco uniká?
- hAssassin
- Člen | 293
@Majkl578: nene, neunika ti nic, a je to takto v poradku. pokud je v session ulozeno primo ID konverzace z tabulky z DB pak je to asi nejjednodussi reseni. Ja mel na mysli, pokud ta konverzace je ulozena pod nejakym klicem, tak jak ten klic nejlip vygenerovat aby byl skutecne unikatni.
@enumag: hezky, o tyhle funkci sem nevedel :)