webForumDet fria alternativet

Inloggning och cache

ASPur ASP

5 svar · 342 visningar · startad av whad

Medlem sedan sep. 2003223 inlägg
Frågan#1

Jag vet att det finns en mängd trådar angående cachning av sidor, men jag kunde inte hitta någon med riktigt samma problem som jag.

Jag brukar cacha sidor som är lite tyngre att ladda med "Response.Expires = 45". Men om jag cachar en sida som är unik för den inloggade användaren så kommer ju nästa användare som loggar in från samma dator inom 45 minuter att få den förre användarens cachade sida. Går detta att lösa, eller ska man cacha en sådan sida på ett annat sätt?

Medlem sedan juni 200032 969 inlägg
#2

När du använder response.expires berättar du bara för klientens webbläsare när sidan slutar gälla. Servern cachear alltså inte.

Medlem sedan sep. 2003223 inlägg
#3

Jo, men finns det ingen lösning?
Jag vill ju att den tunga sidan ska cachas, men att den ändå ska laddas om när en ny användare loggar in.

Medlem sedan juni 20003 076 inlägg
#4

Vad är det som är så tungt? Inte sidan i sig va!?
Ett alternativ är ju att slänga saker i sessions om det t.ex. hämtas från databas eller så! :)

Medlem sedan sep. 2003223 inlägg
#5

Nej, det är några databasfrågor som tar lite tid.
Och det är lite mycket information att lagra i sessions.

Jag får väl sätta in användarens ID i adressen om det inte finns någon annan lösning som tvingar fram en omladdning.

Medlem sedan feb. 200112 078 inlägg
#6

Användarens ID i adressen? Nej, det rekommenderar jag verkligen inte, såvida du inte har hård kontroll på att det ID't verkligen tillhör rätt person. Annars kan man ju bara mata in vilket ID som helst.

Om du verkligen måste cache'a saker, gör det isf i Application t.ex.;

function getCacheObject(sName, sKey)
   If Len(Application("CacheObject" & sName & sKey & "Expires")) Then
      If Not DateDiff("n", Now, Application("CacheObject" & sName & sKey & "Expires")) > 0 Then 
         getCacheObject = Application("CacheObject" & sName & sKey & "Data")
      End If
   End If
end function

sub setCacheObject(sName, sKey, lTTLMin, sData)
   Application("CacheObject" & sName & sKey & "Data") = sData
   Application("CacheObject" & sName & sKey & "Expires") = DateAdd("n", lTTL, Now)
end function

Sen kan du bygga HTML och fösa in om du vill;

sB = getCacheObject("datatable", "userid" & session("UserId"))

If Not Len(sB) Then
   Set rs = conn.Execute("SELECT ... bla bla")

   sB = "<table>"

   While not rs.eof
      sB = sB & "<tr><td>" & rs("DataField") & "</td></tr>"
   rs.movenext
   wend

   sB = sB & "</table>"

   setCacheObject "datatable", "userid" & session("UserId"), 15, sB

   set rs = nothing

End If

Response.Write sB

Den här koden är helt otestad, jag skrev den precis. :r

/Red. Buggfix. :l

148 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)