WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   User dataset i session eller cookie? (https://www.wn.se/forum/showthread.php?t=1063221)

Nerix 2014-10-25 11:23

Vad är de för data som ska sparas ner? Användarrelaterad data sparas normalt i en databas och referensen till raden i en cookie/session. Vad händer annars när någon startar om servern och alla sessions försvinner med tillhörande data?

naak2803 2014-10-25 21:04

Citat:

Ursprungligen postat av Nerix (Inlägg 20501006)
Vad är de för data som ska sparas ner? Användarrelaterad data sparas normalt i en databas och referensen till raden i en cookie/session. Vad händer annars när någon startar om servern och alla sessions försvinner med tillhörande data?

jo precis det är just det som jag har problem med.
startas servern om, så blir alla utloggade, så måste alla logga in igen på nytt för att erhålla nya sessioner.

Men om jag nu gör som du säger, dvs skapar en referenskolumn med en cookie som refererar till användarkolumnen i databasen. då gissar jag att den ska se ut på detta vis:

Kod:

dbo.CookieSession
id, sessionId, userId, dateCreate, dateExpire
1, 54h6j4jkj6tgghjh46ghj546, 1489, 2014-10-25, 2014-10-26

detta kommer ju anropa databasen för varje sida och varje reload. Eftersom jag presenterar ex. förnamn och efternamn på varje sida.

typ "inloggad som Johan Åselius" högst upp på sidan. och det är även sessionen som håller koll på fall användaren är inloggad eller inte.

Nerix 2014-10-25 22:22

Citat:

Ursprungligen postat av naak2803 (Inlägg 20501030)
jo precis det är just det som jag har problem med.
startas servern om, så blir alla utloggade, så måste alla logga in igen på nytt för att erhålla nya sessioner.

Men om jag nu gör som du säger, dvs skapar en referenskolumn med en cookie som refererar till användarkolumnen i databasen. då gissar jag att den ska se ut på detta vis:

Kod:

dbo.CookieSession
id, sessionId, userId, dateCreate, dateExpire
1, 54h6j4jkj6tgghjh46ghj546, 1489, 2014-10-25, 2014-10-26

detta kommer ju anropa databasen för varje sida och varje reload. Eftersom jag presenterar ex. förnamn och efternamn på varje sida.

typ "inloggad som Johan Åselius" högst upp på sidan. och det är även sessionen som håller koll på fall användaren är inloggad eller inte.

Spara ner id:t för användaren i en cookie bara. Signera sedan värdet för att se till att ingen ändrar på informationen (te.x ändrar 1 till 100 och helt plötligt blir användare 100).

Kod:

# Sätter en cookie
cookie = MD5(SECRET + id) + "-" + id

# Läser och verifierar
mac, id = cookie.split("-")
if mac != MD5(SECRET + id)
  # någon har ändrat id:t
else
  # allt är som de ska, hämta användaren

EDIT: Vi pratar alltså om User#id här, inte Cookie#id. Hämta alltså användaren direkt vid varje sidomladdning.

naak2803 2014-10-25 23:13

Citat:

Ursprungligen postat av Nerix (Inlägg 20501032)
Spara ner id:t för användaren i en cookie bara. Signera sedan värdet för att se till att ingen ändrar på informationen (te.x ändrar 1 till 100 och helt plötligt blir användare 100).

Kod:

# Sätter en cookie
cookie = MD5(SECRET + id) + "-" + id

# Läser och verifierar
mac, id = cookie.split("-")
if mac != MD5(SECRET + id)
  # någon har ändrat id:t
else
  # allt är som de ska, hämta användaren

EDIT: Vi pratar alltså om User#id här, inte Cookie#id. Hämta alltså användaren direkt vid varje sidomladdning.

jo jo, så långt hänger jag med.
att lagra användarId:et i en cookie (krypterat). Men det kommer fortfarande leda till en massa sql anrop... dvs en anrop för varje gång sidan laddas.

frågan är då vilket som är bäst:
1. att lagra hela "user" i en dataset som en session
2. att lagra hela "user" i en dataset som en cookie
3. att lagra referens i en cookie som gör en db-anrop för att få fram användare för varje sidan.

Nerix 2014-10-25 23:27

Citat:

Ursprungligen postat av naak2803 (Inlägg 20501034)
jo jo, så långt hänger jag med.
att lagra användarId:et i en cookie (krypterat). Men det kommer fortfarande leda till en massa sql anrop... dvs en anrop för varje gång sidan laddas.

frågan är då vilket som är bäst:
1. att lagra hela "user" i en dataset som en session
2. att lagra hela "user" i en dataset som en cookie
3. att lagra referens i en cookie som gör en db-anrop för att få fram användare för varje sidan.

Nja, du krypterar inget. Informationen hash:as.

Att läsa från databasen vid varje anrop kommer att ha minimal inverkan på din applikation. Vi pratar om 5 ms< / query. Helt onödig optimering. De du pratar om är att spara ner information om användaren på två ställen, vilket kommer skapa en hel del problem och förmodligen resultera i en del buggar. Spara allt på ett stället (i databasen) och hämta informationen när du behöver den.

Conny Westh 2014-10-26 00:01

Citat:

Ursprungligen postat av naak2803 (Inlägg 20500954)
men kommer den inte sega ner servern?

eftersom session tar utrymme på servern, och säg att man har 50 samtidiga användare med ca 20 parametrar per användare vilket blir 50*20=1000 celler med data.

Den mängden data är småpotatis för en normal server, inget att oroa sig för.

Jag brukar lagra användaraid, namn och tid för senaste aktivitet i sessionen och hämta från databasen vid varje sidladdning.

Det ska till hiskeligt många samtidiga användare för att svartiderna ska bli ett problem.


Alla tider är GMT +2. Klockan är nu 22:33.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson