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)

naak2803 2014-10-24 12:22

User dataset i session eller cookie?
 
Tjena!

Tänkte höra lite med er hur ni gör.
Säg att man har en sida där man måste blir medlem för att utföra något.

Skulle ni spara datasetet i en session eller i en cookie?

Varje användare har ca 20 parametrar med information.

ANttila 2014-10-24 14:05

Spara det i databas med sessionid, ip, user agent och senaste aktivitet

naak2803 2014-10-24 14:08

så du vill alltså göra en db-anrop varje gång? måste nämligen ha tillgång till "användaren" för varje sida

jayzee 2014-10-24 14:48

Användarobjekt i session. Det är först när användaren skall göra något (uppdatera) så kollar du i db.

ANttila 2014-10-24 14:50

Använda databas främst för att validera att cookien inte är gammal(som går att manipulera på klientsidan). Bryr du dig inte om det så kan du köra på allt i cookien.

naak2803 2014-10-24 15:36

Citat:

Ursprungligen postat av jayzee (Inlägg 20500951)
Användarobjekt i session. Det är först när användaren skall göra något (uppdatera) så kollar du i db.

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.

Clarence 2014-10-24 15:50

Vill du ha någon form av säkerhet måste du kolla inloggning mot servern. Vill du kunna hantera och spara datan från ett besök till nästa på ett pålitligt sätt måste du spara den på servern.

ANttila 2014-10-24 16:20

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.

Det kommer absolut inte sega ner din server, vilken VPS som helst klarar av det med hästlängder.

x264 2014-10-24 17:46

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.

Du ska lätt klara över 10000 aktiva medlemmar på en VPS. Oroa dig inte :)

naak2803 2014-10-24 18:24

Citat:

Ursprungligen postat av x264 (Inlägg 20500964)
Du ska lätt klara över 10000 aktiva medlemmar på en VPS. Oroa dig inte :)

hmm, men nu har jag inte en vps, utan ett webbhotell konto hos loopia.
funkar det även där?

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 01:50.

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