Tästä olikin juttua jo aikasemmassa keskustelussa, mutta haluisin vielä varmistusta. Eli pitääkö seuraava pätkä koodia synkronisoida ettei vaan käy vahingossa niin, että käyttäjän sessioniin menee jonkun toisen käyttäjän username?
HttpSession session = request.getSession();
String user = (String) session.getAttribute("user");
if (user != null)
{
user = request.getParameter("userName");
session.set("user", user);
}
HttpSession session = request.getSession();
String user = (String) session.getAttribute("user");
if (user != null)
{
user = request.getParameter("userName");
session.set("user", user);
}
Vastaukset 1
Vanhimmat
Ainoa pohdintaa vaativa asia tuossa tapauksessa on, että miten varaudutaan kärsimättömän käyttäjän toimiin.
Eli jos käyttäjä vaikkapa nakuttaa submit-nappia sata kertaa minuutin aikana ja kaikki requestit menevät samalle (ehkäpä hieman hitaammalle) servletille suoritukseen samoilla arvoilla. Erityisen tärkeää tämä on silloin, jos tehdään kyselyitä tai muutoksia tietovarastoihin. "Hups, maksoitkin laskusi sataan kertaan".
Mutta jottei taas harhauduttaisi itse asiasta, niin sessiot siis ovat selaininstanssikohtaisia.
Muutenkin synkronointia kannattaa harrastaa harkiten, varsinkin jos ei ole aivan sinut asian kanssa. Harkitsematon synkronointi saattaa aiheuttaa deadlockeja ja heikentää ohjelman suorituskykyä.