CokeLight skrev:
1. Om man kör intranät o vet att folk kan köra cookies, så finns väl ingen fördel med att använda sessions istället för cookies?
Även sessions bygger på att folk kan köra cookies (det går att köra utan, men det är knepigt och inte påslaget som default). Och det finns massor av fördelar med sessions (mindre trafik, kan lagra det mesta du kastar in i det etc.). Cookies lirar inte i samma division ens.. :)
CokeLight skrev:
Tidigare fick jag för mig att sessions tog mer processorkraft på servern o att cookies var bättre för att den "belastade" klienten mer..?
Belastningen består i att klienten måste skicka och ta emot mer information, vid varje request, men det blir ju en belastning för servern också. Men visst, sessions tar mer processorkraft på servern och ska användas med förnuftighet.
CokeLight skrev:
Men varje gång man kör Request/Response.Cookies så sker ju anrop till servern också..?
Det blir aldrig mer än en request och en tillhörande respons, oavsett vad man hittar på. Klienten skickar alla sina kakor (som tillhör webbplatsen i fråga) vid varje request (även när den "requestar" bilder, stylesheets etc.), och servern skickar tillbaka alla som har uppdaterats eller skapats.
CokeLight skrev:
Alltså, blir det inte lika mycket trafik pga det som med sessions..?
...det blir alltså mer trafik med cookies
CokeLight skrev:
Om jag har säg 20 variabler med användardata som jag använder vid printning, mail, uppdatering, radering innan de t.ex. skrivs till databas osv, vilket är mest naturligt att använda då.. Querystrings, Cookies, eller Sessions?
Utan tvekan Sessions. Det är det de är till för, och de gör det bra, eftersom de hindrar klienten från att mixtra med informationen. En sådan sak som UserID osv. ska man aldrig lagra i en cookie, eftersom det är busenkelt att ändra på värdet, från "utsidan".
CokeLight skrev:
2. om jag skapar en cookie en gång på vilken sida som helst med
Response.Cookies["name"].Value = "something"; (+ expire)
så stämmer det väl att så fort klienten accessar sidan där den koden finns så sparas den cookien på klienten?
Ja, det skulle man kunna säga. I praktiken säger man till servern att "när du skickar tillbaka webbsidan till klienten vill jag att du inkluderar den här cookien i svaret, så att klienten kan komma ihåg den"
CokeLight skrev:
3. LÄSER jag sedan värdet från cookie med Request eller Response? typ
var = Request.Cookies["name"].Value;
//eller..
var = Response.Cookies["name"].Value;
Du läser av värdet med Request.Cookies. Response.Cookies ska ses som en beställningslista på nya/uppdaterade cookies.
CokeLight skrev:
4. Om jag skriver
Response.Cookies["name"].Value = var;
så uppdateras automatiskt värdet på klienten också..? vad händer om man skriver
Request.Cookies["name"].Value = var;
Ingenting av värde.
CokeLight skrev:
5. När man kollar om cookie värdet är tomt är det bäst att kolla om Request.Cookies är tomt va..?
Ja, det är MYCKET viktigt. Om du skriver...
if (Response.Cookies["name"].Value==null)
{
DoSomeThing();
}
...så kommer du aldrig att komma till "DoSomeThing". Det är nämligen så att det skapas en cookie, bara genom att du letar efter den. Ännu värre är dock att man även skriver över cookien i Request.Cookies, om den skulle råka finnas!
CokeLight skrev:
Orsaken till att jag frågar är att det är nån jäkla bug i mitt program.. nånstans tappar användaren ibland värdet o jag vet inte vad det beror på.. om det är session/cookie som är blank... eller om det är nån control som tappas bort i nån IF/ELSE.. så jag tänkte börja med att renodla o bara köra antingen cookie eller session, men då vill jag vara säker på att jag fattar cookies ordentligt först.. :)
Problemen kanske förklaras av det jag skrev ovan? I vilket fall som helst rekommenderar jag att du kör med sessions. Dock finns det en hel del att tänka på med dessa också, men de är i alla fall inte lika lurigt uppbyggda.
Cookie-hanteringen i ASP.NET är en stor miss från MS. Cookies från Request och Response har inget relevant förhållande, så det hade varit bättre om det hade funnit en HttpResponseCookie- och en HttpRequestCookie-klass, i stället för HttpCookie.
Till sist ett litet session-tips, som inte så många tänker på.
Sätt EnableSessionState i web.config till "ReadOnly", och slå om den till "True" endast på de sidor som skriver till sessionen (inloggningssidor o.dyl). Annars kommer servern att behöva läsa in sessionen vid början av varje request, för att sedan skriva tillbaka den vid slutet. Med readonly läses sessionen bara in, vilket sparar serverresurser.