Du måste ladda om sidan. Eller ladda sida #2 i en dold frame eller liknande. En cookie som sätts finns tillgänglig på sidan oberoende av om klienten har tagit emot den eller inte.
Mvh
11 svar · 616 visningar · startad av mattiasnordin
Är det någon som har några erfarenheter av detta?
http://www.asp101.com/articles/john/cookiedetect/default.asp
Har läst ovan. Behöver man verkligen använda querystrings. Jag skulle verkligen vilja undvika att ladda om sidan...
?!
Du måste ladda om sidan. Eller ladda sida #2 i en dold frame eller liknande. En cookie som sätts finns tillgänglig på sidan oberoende av om klienten har tagit emot den eller inte.
Mvh
Ok.
På länken ovan så finns det ytterligare ett exempel.
<%
If Request.Querystring("Check") = "" Then
Session("cookietest") = "True"
Response.Redirect("cookietest.asp?Check=True")
Else
If Session("cookietest") Then
<!-- Execute code if enabled -->
Else
<!-- Execute code if disabled -->
End If
End If
%>
Hur fungerar det? Jag trodde att Session("cookietest") sparades på servern och inte klienten. Vad bevisar igentligen ovan ?
Sessionsvariabler genererar också en cookie hos klienten, en sessioncookie som lagras i minnet (inte på disk som vanliga cookies). I cookien finns en nyckel som knyter ihop klienten med rätt sessionsvariabler på servern, eftersom servern annars inte har en aning om vilken klient som äger vilka variabler.
Vad gäller säkerhetsinställningarna i browsern är de olika för de två olika typerna av kakor. Det kanske inte är helt fel att testa båda?
mvh
Bra förklaring vise @nders. :)
Om man använder javascript för att testa cookies... visst kan man läsa cookies som är skapade med VBscript ?
En cookie är en cookie är en cookie. :)
Kakor är ju gott. !
<% 'THIS SCRIPT WILL TEST IF COOKIES IS ENABLED ON THE CLIENT.
'THE PAGE WILL BE RELOADED. PUT THIS SCRIPT AT THE TOP.
if Request.Querystring("page") <> "reloaded" then
Response.Cookies("cookies_enabled") = "yes"
Response.Cookies("cookies_enabled").Expires = Date + 1
'This is useful if you need to remove the test cookie while you are testing.
'Response.Cookies("cookie_test").Expires = Date - 2
Response.Redirect("_inc_test_if_cookies_is_enabled.asp?page=reloaded")
else
if Request.Cookies("cookies_enabled") = "yes" then
'Cookies is enabled
varCookiesEnabled = "yes"
else
'Cookies is NOT enabled
varCookiesEnabled = "no"
end if
end if %>
(Klienten stödjer kakor = <%=varCookiesEnabled%>)
En liten fix som tar bort en del onödiga omladdningar samt en smidigare hänvisning till samma sida...
<% 'THIS SCRIPT WILL TEST IF COOKIES IS ENABLED ON THE CLIENT.
'THE PAGE WILL BE RELOADED. PUT THIS SCRIPT AT THE TOP.
if Request.Querystring("page") <> "reloaded" and Request.Cookies("cookies_enabled") <> "" then 'Sidan ska inte laddas om efter cookien är satt 1 gång
Response.Cookies("cookies_enabled") = "yes"
Response.Cookies("cookies_enabled").Expires = Date + 1
'Response.Cookies("cookie_test").Expires = Date - 2 'This is useful if you need to remove the test cookie while you are testing.
varThisPageUrl = Request.ServerVariables("SCRIPT_NAME")
varThisPageUrl = varThisPageUrl &"?page=reloaded"
Response.Redirect(varThisPageUrl) 'Detta gör att det går att inkludera detta skript i tex en header.
else
if Request.Cookies("cookies_enabled") = "yes" then
'Cookies is enabled
varCookiesEnabled = "yes"
else
'Cookies is NOT enabled
varCookiesEnabled = "no"
end if
end if %>
(Klienten stödjer kakor = <%=varCookiesEnabled%>)
Jag testade din kod men den fungerade in på min maskin?? Det såg dock rätt ut så jag har kollat en del på din kod och gjort en egen... Denna koden har jag testat på IE6 och Firefox 1.0.6 med olika säkerhetsinställningar...
<%
'----- Kontrollerar om en kaka skall skrivas eller om vi skall kontrollera om kakan finns kvar
If Request.QueryString("reloded") <> "True" Then
'----- Sparar en cookie på klientens dator
Response.Cookies("accept_cookies") = "Accepterad?"
'----- Cookien försvinner om en timme om användedren skulle få för sig att ändra inställningarna
Response.Cookies("accept_cookies").Expires = DateAdd("h", 1, Now())
'----- Skapar en sessionscookie i klientens minne
Session("accept_cookies") = "Accepterad?"
'----- Laddar om sidan för att se om cookies stödjs
varThisPageUrl = Request.ServerVariables("SCRIPT_NAME")
varThisPageUrl = varThisPageUrl &"?reloded=True"
Response.Redirect(varThisPageUrl)
Else
'----- Kollar om kakan har sparats
If Request.Cookies("accept_cookies") <> "" And Session("accept_cookies") <> "" Then
'----- Ja! Alla kakor stödjs
intCookieStatus = 1
ElseIf Request.Cookies("accept_cookies") = "" And Session("accept_cookies") <> "" Then
'----- Ja! men bara sessionskakor stödjs
intCookieStatus = 2
ElseIf Request.Cookies("accept_cookies") <> "" And Session("accept_cookies") = "" Then
'----- Ja! men bara textkakor stödjs
intCookieStatus = 3
Else
'----- Nej! Cookies stöddes ej
intCookieStatus = 4
End If
End If
Response.Write("<b>Status:</b> ")
Select Case intCookieStatus
Case 0
'----- Ingen kontroll har skett
Case 1
Response.Write("Alla kakor accepteras av din webbläsare!")
Case 2
Response.Write("Enbart sessionskakor accepteras av din webbläsare!")
Case 3
Response.Write("Enbart textkakor accepteras av din webbläsare!")
Case 4
Response.Write("Inga kakor accepteras av din webbläsare!")
End Select
Response.Write("<hr>")
'----- Skriver ut textkakan om den finns
Response.Write("Request.Cookies(""accept_cookies"") innehåller <b>" & Request.Cookies("accept_cookies") & "</b><br>" & vbCrLf)
'----- Skriver ut sessionskakan om den finns
Response.Write("Session(""accept_cookies"") innehåller <b>" & Session("accept_cookies") & "</b>")
%>
Ser ju jättebra ut. Fungerar utmärkt på min dator. Tummen upp!
Funktionen som laddar om sidan kan med fördel ändras till:
varThisPageUrl = Request.ServerVariables("URL")
varThisPageQueryString = Request.ServerVariables("QUERY_STRING")
if varThisPageQueryString <> "" then
varThisPageUrl = varThisPageUrl &"?" &varThisPageQueryString &"&page=reloaded"
else
varThisPageUrl = varThisPageUrl &"?page=reloaded"
end if
Då fungerar även direktlänkar till sidor som har en querystring i url:en. Ett problem som jag upptäkte att jag hade :(
:)