[ Mentuz @ 23.07.2007. 12:36 ] @
Imam jedan problem. Napisao sam (C#) ASP.NET aplikaciju preko koje korisnici treba da ostavljaju izvjestaje koji se zatim upisuju bazu. Aplikacija radi dobro kada je logiran jedan korisnik. Medjutim, kada su istovremeno logirana dva korisnika, tu nastaje problem. Jednostavno, aplikacija ne razdvaja korisnike, vec ih mijesa. Postoji li neki, efikasan, nacin da se ovo eliminise?
[ spartak @ 23.07.2007. 13:10 ] @
Aplikacija nista ne mesa, vec radi tacno onako kakvom si je napravio.

Mozes li da pojasnis sta ti znaci dva razlicita korisnika i to da ih aplikacija mesa? Daj neki primer kako je sada a kako bi ti zeleo da budes. Pocni od pocetka, kako su korisnici autentikovani, sta koji treba da uradi i slicno...
[ Mentuz @ 23.07.2007. 13:40 ] @
Dakle.
Postoji stranica na kojoj se korisnici moraju logovati (username i password). Ukoliko u bazi podataka postoji korisnik sa unesenim username-om i password-om, u sesiju se zabiljezi njegov id iz baze podataka (nesta ovako: Session["Id"] = id) nakon cega slijedi Response.Redirect("User.aspx"). Kada se ucita User.aspx, u lokalnu varijablu sacuvam id korisnika (id = (string)Session["Id"]) kako bih mogao na osnovu toga ucitati izvjestaje koje je taj korisnik ostavio. Ovo radi bez ikakvih problema kada je logiran samo jedan korisnik. Medjutim, ako su istovremeno logirana dva korisnika dolazi do zbrke. Izvjestaji od jednog korisnika se prikazuju kod drugog i obratno. Slazem se da aplikacija radi onako kako je napises, ali ja nemogu da skontam gdje sam pogrijesio.
[ Smireni Magnet @ 23.07.2007. 22:47 ] @
Kako te tvoje korisnike aplikacija razaznaje?
[ Mentuz @ 24.07.2007. 07:54 ] @
Preko korisnikovog Id-ja iz baze podataka.
[ Smireni Magnet @ 24.07.2007. 08:15 ] @
Proveri da li podatke koje filtriras (te izvestaje), filtriras preko id-a. Postoji mogucnost da si tako nesto zaboravio.

Ili, pogledaj i suprotnu varijantu: da li se u bazi pored svakog izvestaja koji korisnik "unese" nalazi odgovarajuci id korisnika.

Ako i dalje imas problema, a ovo ti nije pomoglo (ovo ti je najbazicnija stvar) postavi kod pa da ga zajedno analiziramo...

[ Mentuz @ 24.07.2007. 09:00 ] @
Problem uopste nije u bazi podataka jer svaki izvjestaj sadrzi id korisnika koji ga je ostavio plus id projekta za koji se postavlja taj izvjestaj (id projekta nije sporan). Nema nikakvih problema kada samo jedan korisnik radi - tada sve radi perfektno. Cim se logiraju dvojica, njihovi id-jevi se pomijesaju, bilo da se radi na istom racunaru (pokrenuta dva IE) ili na dva racunara (u mrezi). Jednostavno, ako sam se ja logirao poslije nekoga, automatski se moj id prepise preko njegovog tako da se njemu ucitaju moji izvjestaji. Nije mi jasno zasto se to desava.
Evo kako sam to uradio (izbacicu nevazne stvari):

Login.aspx

Code:
Session["ID"] = dataSet.Tables[0].Rows[0][0].ToString(); //id korisnika
                                    
this.Response.Redirect("User.aspx"); 



User.aspx

Code:

...
public static string id_korisnika = null;
...

private void Page_Load(object sender, System.EventArgs e)
{
            

    Response.ExpiresAbsolute=DateTime.Now.AddDays(-1d);
    Response.Expires =-1500;
    Response.CacheControl = "no-cache";


    if(!this.IsPostBack)
    {    
        id_korisnika = (string)Session["ID"];
        
        ...            
    }
}


To je sve gdje sam koristio sesiju za koju smatram da je uzrok problema.
[ jablan @ 24.07.2007. 09:19 ] @
Biće da ti je već istekao kuki kad uradiš redirekciju. Što uopšte šalješ te Expires headere? .NET se sam stara da se dinamičke stranice ne keširaju.
[ Smireni Magnet @ 24.07.2007. 09:27 ] @
Brisi ovo:
Code:
        
        Response.ExpiresAbsolute=DateTime.Now.AddDays(-1d);
        Response.Expires =-1500;
        Response.CacheControl = "no-cache";
\

Sta ce ti?
[ Mentuz @ 24.07.2007. 09:42 ] @
Citat:

Brisi ovo:

Code:
  
        Response.ExpiresAbsolute=DateTime.Now.AddDays(-1d);
        Response.Expires =-1500;
        Response.CacheControl = "no-cache";


Sta ce ti?


Obrisao sam. Problem je ostao.
[ jablan @ 24.07.2007. 09:48 ] @
A nemaš isto to i u Login.aspx?
[ Mentuz @ 24.07.2007. 09:54 ] @
Citat:
A nemaš isto to i u Login.aspx?


Nemam. Bilo je samo u User.aspx.
[ jablan @ 24.07.2007. 10:02 ] @
Ne znam šta da ti kažem. Evo u prilogu dve stranice koje rade to što ti hoćeš, probaj da li kod tebe rade, ako da, onda probaj da uprostiš svoje stranice što više kako bi eliminisao potencijalne probleme.
[ Drasko M @ 24.07.2007. 12:54 ] @
Na osnovi problema koji ste opisali reklo bi se da negde u kodu upisijete na isto mesto user ID za sve korisnike. Posto koristite citanje/upis preko dataseta to je verovatno neki update metod.
Ako vec imate jedinstven ID za svakog korisnika i cuvate ga u posebnoj session varijabli zasto uopste skladistite taj podatak u bazi posebno?
[ Mentuz @ 24.07.2007. 13:17 ] @
Citat:
Ako vec imate jedinstven ID za svakog korisnika i cuvate ga u posebnoj session varijabli zasto uopste skladistite taj podatak u bazi posebno?


Na osnovu username-a i passworda-a uzmem id_korisnika koji zatim proslijedim preko sesije kako bi na osnovu tog id-a mogao iz baze ucitati projekte (id_projekta i id_korisnika), a zatim eventualnim klikom na projekt i izvjestaje za taj projekt (id_korisnika, id_projekta). Sve lijepo radi do momenta kada neko drugi pokrene npr. IE logira se sa svojim username-om i password-om i tada njegov id_korisnika postaje i moj id_korisnika. Jednostavno se tudji id_korisnika prepise preko mog id_korisnika. Kako je to moguce, zar .NET nema nekakav mehanizam da to sve lijepo razdvoji ili se i to mora isprogramirati? Da nije slicajno problem u tome sto sam id_korisnika deklarisao kao public static string id_korisnika = null;?

P.S. Radim sa .NET Frameworkom 1.1

[ jablan @ 24.07.2007. 13:27 ] @
Jeste problem, ne treba da bude static.
[ Mentuz @ 24.07.2007. 14:30 ] @
U pravu si :)