webForumDet fria alternativet

Hur hålla koll på tiden

ASP

16 svar · 528 visningar · startad av WebbisNet

Medlem sedan feb. 20032 027 inlägg
Frågan#1

Jag har på webbisen.com gått över från sessioner till kakor och det har stabiliserat sidan en hel del, problemet är nu att när en användare rör sig på sidan så uppdateras tiden i db och det är den tiden jag vill kolla användarens aktiviteter med...men just nu så loggas man ut när kakan förlorar sitt värde oavsett vad tiden i db står på

<%UserID = Request.Cookies("webbisnet")("UserID")
If "" & UserID = "" Then
response.write "<script language='javascript'>"
response.write "parent.location.href='/timeout.asp'"
response.write "</script>"
else
mer kod här
end if%>
Medlem sedan dec. 19996 721 inlägg
#2

WebbisNet skrev:

...men just nu så loggas man ut när kakan förlorar sitt värde oavsett vad tiden i db står på

Ja.... det är ju kakan som håller reda på att man är inloggad, så något annat är inte att räkna med.

Medlem sedan maj 200010 687 inlägg
#3

Har du verkligen tänkt över det där ordentligt?
Genom att använda kakor så kan ju vem som helst modifiera värdena i dem och t.ex. ändra UserId så de blir inloggade som någon annan.

Medlem sedan juli 20041 183 inlägg
#4

Hmm, är inte cookies kodade så att enbart webbplattsen den kommer från kan läsa den? Om inte annat angets av sida som skapade cookien??

Finns det program för att ändra/läsa vad som står i en cookie? Vad står t.ex. här under??

Namn: WEBTRENDS_ID
Innehåll: 217.210.97.45-1040659504.29712326
Värd: https://www.falukuriren.se

Medlem sedan dec. 19996 721 inlägg
#5

lilja skrev:

Hmm, är inte cookies kodade så att enbart webbplattsen den kommer från kan läsa den? Om inte annat angets av sida som skapade cookien??

Nej, cookies är i klartext och kan enkelt manipuleras.

lilja skrev:

Finns det program för att ändra/läsa vad som står i en cookie?

Läsa cookien kan man alltid göra, och för att ändra värdet finns det många alternativ, beroende på webbläsare. Man ska helt enkelt inte använda cookies för att lagra känslig information.

Medlem sedan feb. 20032 027 inlägg
#6

Jag använder kakor för att lagra användarID under den tid medlemmen är på webplatsen, kan man inte uppdatera kakans tid då den skapades till aktuell tid då användaren byter sida på webplatsen

emission skrev:

Nej, cookies är i klartext och kan enkelt manipuleras.

Läsa cookien kan man alltid göra, och för att ändra värdet finns det många alternativ, beroende på webbläsare. Man ska helt enkelt inte använda cookies för att lagra känslig information.

Medlem sedan dec. 19996 721 inlägg
#7

WebbisNet skrev:

Jag använder kakor för att lagra användarID under den tid medlemmen är på webplatsen, kan man inte uppdatera kakans tid då den skapades till aktuell tid då användaren byter sida på webplatsen

Jag förstår inte riktigt vad du är ute efter.

1. Kakan försvinner inte så länge webbläsaren är igång, såvida du inte specifkt satt en expiretid.
2. Kakan är osäker oavsett vad du gör.

Medlem sedan feb. 20032 027 inlägg
#8

Jag använder kaka istället för sessionsID och kakan är nu satt till 90 minuter, men hur ska man kunna se till att kakan är aktiv om användaren är aktiv på webplatsen i ex 120 minuter......gick över till kaka från sessionsID eftersom kakan anses bättre

Medlem sedan dec. 19996 721 inlägg
#9

WebbisNet skrev:

Jag använder kaka istället för sessionsID och kakan är nu satt till 90 minuter, men hur ska man kunna se till att kakan är aktiv om användaren är aktiv på webplatsen i ex 120 minuter......

Sätt ingen expire överhuvud taget

WebbisNet skrev:

gick över till kaka från sessionsID eftersom kakan anses bättre

Självklart får du köra med kakor om du vill, men du måste vara medveten om att det är en stor säkerhetsrisk.

Medlem sedan feb. 20032 027 inlägg
#10

hur kan ett användarID vara en stor risk, inget användarnamn eller lösen finns ju i kakan

Medlem sedan dec. 19996 721 inlägg
#11

Det är ju användarID som du använder för att verifiera vilken användare man är och huruvida man är inloggad eller inte, så intrångsmöjligheten är total.

Varför inte sessions? Jag trodde att problemet var löst

http://www.webforum.nu/showthread.php?t=130802

Medlem sedan juli 20041 183 inlägg
#12

Jag trodde också att Sessioner var mycket bättre?? Vad har du fått för information och från vilket ställe?

Medlem sedan feb. 20032 027 inlägg
#13

emission skrev:

Det är ju användarID som du använder för att verifiera vilken användare man är och huruvida man är inloggad eller inte, så intrångsmöjligheten är total.

Varför inte sessions? Jag trodde att problemet var löst

http://www.webforum.nu/showthread.php?t=130802

@nders föreslog kakor och det gjorde sidan stabilare än med sessions

Medlem sedan dec. 19996 721 inlägg
#14

WebbisNet skrev:

@nders föreslog kakor och det gjorde sidan stabilare än med sessions

Det stämmer, men din sida är så pass publik att det inte riktigt känns som en bra idé (kakor löser det förra problemet, men introducerar andra, skulle man kunna säga).

Som jag ser det finns det tre lösningar.

1. Gå tillbaka till sessions och undersök om det verkligen var ett problem, särskilt med desdecados kommentar i åtanke

2. Kör med cookies, men lägg inte userid i cookien utan ett annat userid (i samma tabell) som inte går att gissa sig fram till. Lämpligen ett GUID. Kör du SQL Server? MySQL?

3. Kör med cookies, men skapa egna "sessioner" i en sessionstabell (innehållande t.ex. userid, GUID,created och lastupdate) när någon loggar in. Den lösningen blir lika tajt som sessioner, men du kan styra över sessionens livslängd helt själv.

Medlem sedan feb. 20032 027 inlägg
#15

emission skrev:

Det stämmer, men din sida är så pass publik att det inte riktigt känns som en bra idé (kakor löser det förra problemet, men introducerar andra, skulle man kunna säga).

Som jag ser det finns det tre lösningar.

1. Gå tillbaka till sessions och undersök om det verkligen var ett problem, särskilt med desdecados kommentar i åtanke

2. Kör med cookies, men lägg inte userid i cookien utan ett annat userid (i samma tabell) som inte går att gissa sig fram till. Lämpligen ett GUID. Kör du SQL Server? MySQL?

3. Kör med cookies, men skapa egna "sessioner" i en sessionstabell (innehållande t.ex. userid, GUID,created och lastupdate) när någon loggar in. Den lösningen blir lika tajt som sessioner, men du kan styra över sessionens livslängd helt själv.

Har du nåt exempel på nummer 3? , för tillfället kör jag med access

Medlem sedan dec. 19996 721 inlägg
#16

Jag har inte tillgång till Access, men jag kan tänka mig att man kan göra så här (har testat principen i SQL Server):

1. Skapa en tabell för sessionerna
2. Sätt en kolumn i tabellen till Räknare, med datalängden Replikerings-ID
3. Gör kolumnen till primärnyckel
4. De övriga kolumnerna är UserID (tal), CreatedTS och LastAccessedTS (datum + tid)

Jag har aldrig provat detta i Access, men i SQL Server kör man med uniqueidentifier och funktionen newid() för att göra motsvarande. Informationen fann jag på http://www.devx.com/dbzone/Article/10167/1954?pf=true

4. Koda om din inloggning så att den skapar nya "sessioner"


'Vi förutsätter att du redan gjort själva inloggningen och därigenom fått ut användarens UserID

strSQL="INSERT INTO Sessions (UserID,CreatedTS,LastAccessed) VALUES(" & UserID & ",now(),now())"
objConn.execute strSQL
'Fulfix eftersom det inte verkar finnas någon funktion i Access som kan skapa GUID utan att lägga till rader
strSQL="SELECT TOP 1 GUID FROM Sessions WHERE UserID=1 ORDER BY CreatedTS DESC"
set rs=objConn.Execute(strSQL)
if not rs.eof then
   'Grattis, ett nytt sessions-ID
   strSessionID=cstr(rs(0))
   Response.Cookies("GUID")=strSessionID
end if

5. Lägg in en include på varje sida, där du hämtar ut din vanliga UserID mha kakan, och framför allt, uppdaterar LastAccessedTS

Dim intAff, strGUID
strGUID=Request.Cookies("GUID")
if strGUID<>"" then
   strSQL="UPDATE Sessions SET LastAccessed=now() WHERE GUID='" & replace(strGUID,"'","''") & "'"
   objConn.execute strSQL, intAff
   if Session("UserID")="" then 'Onödigt att komma om ASP-sessionen fortfarande lever
      if intAff=1 then 'Det blev tydligen en träff på updaten, så vi går vidare
         strSQL="SELECT UserID FROM Sessions WHERE GUID='" & replace(strGUID,"'","''") & "'"
         set rs=objConn.Execute(strSQL)
         if not rs.eof then
            Session("UserID")=cint(rs(0))
         else
            'Borde inte kunna hända
         end if
      else
	     'Det fanns ingen session. Gör något åt saken.
      end if
   end if
else
   'Tydligen inte inloggad, eller utan kakor
end if

Dessutom måste man lägga till kod som tar bort gamla sessioner (genom att kolla LastAccessed).

I exemplet har jag använt ASP-sessions för att lagra UserID, men i princip skulle du kunna använda en vanlig globalt dimmad variabel för att hålla UserID i och i så fall stänga av sessions helt (enablesessionstate=false). Är det mer värden än UserID som är intressanta så kan du hämta ut dem i samband med "SELECT UserID"-sökningen ovan (joina ihop med de tabeller du behöver)

Medlem sedan dec. 19996 721 inlägg
#17

Det funkade bra med vanliga Sessions?

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)