webForumDet fria alternativet

Cookie & Session koll

7 svar · 286 visningar · startad av mjonson

mjonsonMedlem sedan nov. 200233 inlägg
#1

Hej, jag gör en sida där jag vill kolla vilket språk (svenska, engelska el. tyska) användaren vill se. Innehållet ska infogas via ASP in i HTML strukturen beroende på valt språk.

Det finns olika möjligheter jag kan kolla i följande ordning varje gång en besökare kommer in på en sida:

1. Antingen kan de komma till sidan via en länk med en parameter i HTTP-head, typ: start.asp?lang=en. Om det finns det så sätter jag session och cookie till valet.

Om ingen parameter finns kollar jag:

2. En session-variabel kan redan ha satts på en annan sida inom sajten. Jag kollar om session variablen finns.

Om ingen session variabel finns så kollar jag:

3. Användaren kan ha varit på sajten tidigare. Jag kollar det genom att se om det finns någon cookie med språk-val. Om det finns det så sätter jag session till valet.

Om varken parameter i länken, session eller cookie finns så måste jag redirecta användaren till en sida (kallad default.asp) där han måste välja språk genom att klicka på en av flaggorna.

Session variabeln som alla dessa alternativ resulterar i bestämmer sedan vilket språk som ska infogas ur en include fil där alla språk-strängar ligger.

I stora drag har jag implementerat den kod som krävs för att kolla detta. Men jag får nåt fel med cookies. Ser någon felet?


<%

If Request.QueryString("lang") = "" Then

  If Session("session_lang") = "" Then

    If IsEmpty(Response.Cookies("cookie_lang")) Then
    Response.Redirect("default.asp")
    Else
    ''Här blir det något fel. Kanske läser jag inte cookies rätt.
    Session("session_lang") = Response.Cookies("cookie_lang")
    End If

  End If
  Else

  Session("session_lang") = Request.QueryString("lang")
  Response.Cookies("cookie_lang") = Request.QueryString("lang")
  Response.Cookies("cookie_lang").Expires = "24 Dec 2008"

End If

%>

'''Sedan kallar jag på:
<!--#include file="language_content.inc"-->
'''I denna finns en Select Case sats som genom att kolla session-language variabeln avgör vilket språk som alla variabel strängar ska sättas till.

Hoppas någon ser vad jag har gjort för fel.

@ndersMedlem sedan juni 200032 969 inlägg
#2
Session("session_lang") = [b]Request[/b].Cookies("cookie_lang")

Mvh,

mjonsonMedlem sedan nov. 200233 inlägg
#3

Snabbt svar!

Det gick sannerligen fort!

Det måste vara det som är felet, ska testa när jag kommer hem.

Tackar! :birp

Har du något tips på vad jag ska tänka på när jag sätter cookies?
Räcker det med expirery date eller ska jag göra nåt mer? T.ex. kolla om användaren har stöd för cookies. Vad händer om han inte har det?

Och när jag läser cookies. Händer det något om jag försöker läsa och han inte accepterar cookies?

mjonsonMedlem sedan nov. 200233 inlägg
#4

En fråga till. Är det bättre att använda sig av IsEmpty istället för = " "? Skulle IsEmpty fungera i samtliga fall i koden ovan?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

Ang. expire på en cookie, det är bättre att gardera sig med en funktion som alltid sätter datumet t.ex. 365 dagar framåt:

Response.Cookies("cookie_lang").Expires = dateAdd("d",365,date)

Jag använder aldrig isEmpty, jag vet inte varför men jag har aldrig haft behov av det. Jag brukar köra med = "" istället. Behandlar jag värden som jag tror kan bli NULL (alltså ingenting) så kan man göra såhär:

if trim(strVal & "") = "" then
  'gör nåt
end if

Även om strVal är NULL, så får du inget felmeddelande eller strul. :)

@ndersMedlem sedan juni 200032 969 inlägg
#6

IsEmpty ska man inte använda på det sättet. IsEmpty ger nämligen bara true om en variabel är oinitierad eller explicit satt till värdet Empty. Tom sträng eller null ger false.

Mvh,

mjonsonMedlem sedan nov. 200233 inlägg
#7

Men jag tyckte att det blev fel när jag testade om en cookie var "". När jag däremot ändrade till IsEmpty så fungerade den biten. Men då hade jag iof andra problem med min cookie-avläsning.

Fungerar det att testa om en cookie är ""?

@ndersMedlem sedan juni 200032 969 inlägg
#8

Finns inte kakan (eller nyckeln) så görs jämförelsen mot ett oinitierat värde, sålunda IsEmpty(kaka) = True.

Du kan annars kanske använda egenskapen HasKeys. Jag kan själv väldigt lite om kakor, men en sökning borde stilla din hunger.

Mvh,

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