Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Cuvanje session variabli u bazi?

[es] :: Java :: Cuvanje session variabli u bazi?

[ Pregleda: 2040 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.dynamic.sbb.rs.



Profil

icon Cuvanje session variabli u bazi?18.02.2010. u 21:29 - pre 172 meseci
Krenuo sam da prepisujem neku webaplikaciju koju sam pisao u php-u ..
Session variable sam cuvao u bazi, koristeci session_set_save_handler('_open', '_close', '_read', '_write', '_destroy', '_clean');

E sad, interesuje me kako stoje stvari u javi(tacnije jsp), da li je potrebno ovo raditi i ako jeste ako moze neko da me uputi kako?
Pretpostavljam da ide jsp<->servlet<->beans ..
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.dynamic.sbb.rs.



Profil

icon Re: Cuvanje session variabli u bazi?22.02.2010. u 17:37 - pre 172 meseci
30+ pregleda i niko da da neki predlog ..
Ajde ljudi .. pomozite .. dajte neke smernice .. bilo sta ..

Svako dobro.
 
Odgovor na temu

zmau
Dragan Jovanović
programer
Šabac

Član broj: 80834
Poruke: 290
*.mbb.telenor.rs.



+80 Profil

icon Re: Cuvanje session variabli u bazi?27.02.2010. u 13:58 - pre 172 meseci
Možda ljudi ne znaju šta su session varijable (kao što ja ne znam, doduše ja sam slab sa web guijem). Je l to neka php terminologija, ili standardna http terminologija, ili nešto treće ?
A šta god da su, ako hoćeš neki podatak iz JSPa da upišeš u bazu - da, treba iz JSPa da okineš metodu nekog beana i da joj proslediš podatke koje će da spakuje u bazu. Mislim da u principu ne moraš da imaš servlete, mada ako inače koristiš takvu arhitekturu, onda je se drži i u ovom primeru.

Ne verujem da sam puno pomogao, al obzirom da se niko drugi ne javlja...
it works on my machine
 
Odgovor na temu

antix

Član broj: 8388
Poruke: 265
*.adsl.verat.net.

Jabber: antix@elitesecurity.org


Profil

icon Re: Cuvanje session variabli u bazi?27.02.2010. u 14:18 - pre 172 meseci
Pretpostavljam da misliš na varijable koje setuješ kao atribut u instancu klase HttpSession? Nisam do sada vidio da se ove varijable čuvaju u bazi. Znam da je ovo lako izvesti u ASP i PHP. Prosto do sada nisam imao potrebu da čuvam ovakvu vrstu podataka u bazi. Zapravo uz pomoć novih frameworka (Spring, Struts2) skoro da nije ni potrebno čuvati bilo šta u HttpSession.

Ali ako baš želiš možeš da iskoristiš HttpSessionBindingListener za upisivanje u bazu kada neko nešto stavi u HttpSession. Za čitanje iz baze (kada neko pozove session.getAttribute(attrName)) moraćeš da napraviš neki metod u zajedničkoj nadklasi svih kontrolera ili neki utility metod.

Moguće je ovo uraditi bez mnogo muke ali mislim da nema potrebe. Možeš pametnije da odradiš to što želiš!
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.dynamic.sbb.rs.



Profil

icon Re: Cuvanje session variabli u bazi?28.02.2010. u 17:58 - pre 172 meseci
Citat:
antix: Pretpostavljam da misliš na varijable koje setuješ kao atribut u instancu klase HttpSession?

upravo to
Citat:
Nisam do sada vidio da se ove varijable čuvaju u bazi. Znam da je ovo lako izvesti u ASP i PHP. Prosto do sada nisam imao potrebu da čuvam ovakvu vrstu podataka u bazi. Zapravo uz pomoć novih frameworka (Spring, Struts2) skoro da nije ni potrebno čuvati bilo šta u HttpSession.

Ukoliko se resetuje server, sta se desava sa tim session variablama kada se one cuvaju u bazi a sta ukoliko se koristi neki od navedenih frameworka?
Citat:
Ali ako baš želiš možeš da iskoristiš HttpSessionBindingListener za upisivanje u bazu kada neko nešto stavi u HttpSession. Za čitanje iz baze (kada neko pozove session.getAttribute(attrName)) moraćeš da napraviš neki metod u zajedničkoj nadklasi svih kontrolera ili neki utility metod.

ok, bacam se na google-ovanje .. ako imas mozda neki primer sa HttpSessionBindingListener okaci ovde.
Citat:
Moguće je ovo uraditi bez mnogo muke ali mislim da nema potrebe. Možeš pametnije da odradiš to što želiš!

kao na primer?
 
Odgovor na temu

antix

Član broj: 8388
Poruke: 265
*.adsl.verat.net.

Jabber: antix@elitesecurity.org


Profil

icon Re: Cuvanje session variabli u bazi?28.02.2010. u 18:56 - pre 172 meseci
pa pazi... ti ako zelis da cuvas neke objekte vezane za session moraces da cuvas i session id - kao kljuc za raspoznavanje kome koji podatak pripada. E sada.. ako ti se restartuje server on ce ponovo da pocne da generise session IDs - sto znaci da tvoji podaci u bazi pripadaju sesijama koje su invalid (jer je server restartovan i sve pocinje ispocetka).

Ovo mozes da odradis tako sto ces napraviti cluster JBoss ili Tomcat instanci. I kada se srusi jedan server load balancer ce automatski da prebaci request na drugi server u clusteru. Mi smo ovako rjesavali slicne probleme i super radi - uradis request, ugasis server u clusteru, ponovo novi request (ulogovan si), mali delay jer load balancer pokusava da nadje stari server (sticky session) - ovo je delay od par sekundi, i zatim load balancer request prebacuje na drugi server u clusteru (sesija je i dalje tu sa svim podacima). Naravno ako je veliki HttpSession objekat (mnogo stvari stavljas u njega) moze da dodje do problema jer mora uvijek da se radi session replication izmedju svih servera u clusteru.
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.dynamic.sbb.rs.



Profil

icon Re: Cuvanje session variabli u bazi?01.03.2010. u 14:30 - pre 172 meseci
E ovako, napisao sam jednu klasu SessionListener koja implementira interface HttpSessionBindingListener
Code:
package webUtil;
import javax.servlet.http.*;
import pool.db;

public class SessionListener implements HttpSessionBindingListener
{
    @Override
    public synchronized void valueBound(HttpSessionBindingEvent event) {
        HttpSession session = event.getSession();
        String session_id = session.getId();
        String username = "test";
        String ip_address = "10.20.30.20";
        String session_name = event.getName();
        String session_value = event.getValue().toString();
        db.executeQuery("INSERT INTO sessions(session_id, username, ip_address, session_name, session_value) VALUES('"+session_id+"', '"+username+"', '"+ip_address+"', '"+session_name+"', '"+session_value+"')", 1);
    }

    @Override
    public synchronized void valueUnbound(HttpSessionBindingEvent event) {
        HttpSession session = event.getSession();
        String session_id = session.getId();
        db.executeQuery("DELETE FROM sessions WHERE session_id = '"+session_id+"'", 1);

    }

}


, e sad me interesuje kako i sta dalje.
probao sam sa session.setAttribute("test", "test") ali se ne upisuje u bazu?
jel moze mala pomoc?

Hvala.
 
Odgovor na temu

antix

Član broj: 8388
Poruke: 265
*.adsl.verat.net.

Jabber: antix@elitesecurity.org


Profil

icon Re: Cuvanje session variabli u bazi?01.03.2010. u 18:26 - pre 172 meseci
jesi li stavio ovaj listener u web.xml?

shvatas da ti ovaj tvoj pristup ne garantuje nista ako dodje do restarta servera?
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.dynamic.sbb.rs.



Profil

icon Re: Cuvanje session variabli u bazi?01.03.2010. u 19:02 - pre 172 meseci
Citat:
jesi li stavio ovaj listener u web.xml?

jesam

Citat:
shvatas da ti ovaj tvoj pristup ne garantuje nista ako dodje do restarta servera?

da, shvatam. Rekao sam na pocetku posta zasto sve ovo radim, i ujedno i postavio pitanje da li ovakvo nesto ima smisla. Jel mislis da nema potrebe za ovim?
 
Odgovor na temu

antix

Član broj: 8388
Poruke: 265
*.adsl.verat.net.

Jabber: antix@elitesecurity.org


Profil

icon Re: Cuvanje session variabli u bazi?01.03.2010. u 20:30 - pre 172 meseci
pa posto ovo nece da ti radi kako treba.... posebno sto ne znas kada da ocistis nepotrebne vrijednosti iz baze.... onda treba da trazis nesto sto ce da ti radi posao.... ja sam ti objasnio kako mozes pomocu clustera da sve to sredis.... drugo sta moze da ti pomogne su neki distribuirani cache sistemi ili tako nesto....

sta znam... sve zavisi za koliko para i za koliko vremena treba da ti to proradi....


a ako samo ucis... onda mozes da razvijas i svoj sistem... mozda ti se posreci a sigurno ces nauciti nesto :)
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.dynamic.sbb.rs.



Profil

icon Re: Cuvanje session variabli u bazi?02.03.2010. u 04:39 - pre 171 meseci
Citat:
antix: pa posto ovo nece da ti radi kako treba.... posebno sto ne znas kada da ocistis nepotrebne vrijednosti iz baze....

Ne bih isao tako daleko sa zakljucima. Ovo je samo primer koji je trebao da upise jedan slog u tabelu na session.setAtribute() i da ga obrise pri session.invalidate().

Ukoliko Ti ne znas kako ovo da se odradi, onda tako i kazi. Lepo sam te pitao za savet, odnosno primer. Uputio si me na HttpSessionBindingListener, sto sam implementirao, ali ocigledno to ne radi bas onako kako Ti kazes da radi.

:)
 
Odgovor na temu

antix

Član broj: 8388
Poruke: 265
217.26.77.*

Jabber: antix@elitesecurity.org


Profil

icon Re: Cuvanje session variabli u bazi?02.03.2010. u 08:41 - pre 171 meseci
HttpSessionBindingListener radi 100% za upisivanje. To sto ne znas da podesis je vise do tebe nego do mene.

Kada shvatis da to sto radis nece da ti radi posao mozda da dodjes i izvines se. Ipak sam probao da ti pomognem i konstruktivno sam kritikovao tvoje rjesenje (sto znaci da sam ti dao i prijedlog sa clusterom ali posto to nisi komentarisao pretpostavljam da ne uopste nisi shvatio sta sam htio da kazem).

A zasto nece da radi tvoje "rjesenje". Najmanje dva razloga:

1) session.invalidate() se ne poziva u slucaju restarta i crasha servera
2) session id postaje invalid poslije restarta servera


Ali pretpostavljam da si ti ovo vec znao?


uzivaj
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.dynamic.sbb.rs.



Profil

icon Re: Cuvanje session variabli u bazi?02.03.2010. u 09:48 - pre 171 meseci
Normalno da sam znao .. ko je uopste pominjao to?
Lepo sam napisao da ne radi upis u bazu .. kakve to veze ima sa ovim sto si ti napisao?

Rekao sam sledece
Citat:
Shejn: E ovako, napisao sam jednu klasu SessionListener koja implementira interface HttpSessionBindingListener
Code:
package webUtil;
import javax.servlet.http.*;
import pool.db;

public class SessionListener implements HttpSessionBindingListener
{
    @Override
    public synchronized void valueBound(HttpSessionBindingEvent event) {
        HttpSession session = event.getSession();
        String session_id = session.getId();
        String username = "test";
        String ip_address = "10.20.30.20";
        String session_name = event.getName();
        String session_value = event.getValue().toString();
        db.executeQuery("INSERT INTO sessions(session_id, username, ip_address, session_name, session_value) VALUES('"+session_id+"', '"+username+"', '"+ip_address+"', '"+session_name+"', '"+session_value+"')", 1);
    }

    @Override
    public synchronized void valueUnbound(HttpSessionBindingEvent event) {
        HttpSession session = event.getSession();
        String session_id = session.getId();
        db.executeQuery("DELETE FROM sessions WHERE session_id = '"+session_id+"'", 1);

    }

}


, e sad me interesuje kako i sta dalje.
probao sam sa session.setAttribute("test", "test") ali se ne upisuje u bazu?
jel moze mala pomoc?

Hvala.

ja ovde nigde nespominjem restart .. ili mozda ti vidis nesto sto ja ne vidim ;)
 
Odgovor na temu

reg
java,java,java
bgd

Član broj: 249663
Poruke: 30
*.dynamic.sbb.rs.



Profil

icon Re: Cuvanje session variabli u bazi?03.03.2010. u 01:09 - pre 171 meseci
Zasto ne napises nesto o tome koja je svrha cele ove price?

NPR:
Prekid konekcije kod kljenta u sred kupovine pa zelis da sacuvas
do pola napunjeni shopping card u sesiji
kako bi na rekonekciji nastavio shopping ?

Tu postoje razni pristupi
neko serijalizuje to u fajl...

Dakle opisi sta si radio sa tim u PHP
pa da vidimo koje bi bilo adekvatno resenje u javi,
a mislim da ti je antix sa load balancerom dao jedno od resenja.

pozz
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.dynamic.sbb.rs.



Profil

icon Re: Cuvanje session variabli u bazi?03.03.2010. u 05:24 - pre 171 meseci
U php sam hteo da izbegnem cuvanje session variabli u fajlu, posto se cuvaju u prilicno jednostavnom formatu.

Mozda sam zvucao malo neskromno, ili ne znam ja kako, ali antix mi je stvarno pomogao uputivsi me na HttpSessionBindingListener. Nije mi bilo samo jasno gde gresim u implementiranju istog.
Servlet SessionListener je napisan samo primera radi .. dodat je u web.xml .. ali iz nekog razloga ne radi upis u bazu.

@antix
Hvala
 
Odgovor na temu

[es] :: Java :: Cuvanje session variabli u bazi?

[ Pregleda: 2040 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.