webForumDet fria alternativet

Finns det globala variabler?

9 svar · 594 visningar · startad av haider

haiderMedlem sedan jan. 2003956 inlägg
#1

Hej,

Finns det variabler som är globala och som fortsätter existera när man hoppar till en annan sida? Det låter lite som en säkerhetsrisk, men vad vet jag; funktionen kanske redan finns.

Säg att jag vill köra en funktion som förutsätter at en variabel existerar. Målet är att variabeln inte existerar, så att funktionen alltid körs.
Men i ett "adminläge" vill jag kunna disabla denna funktion och då tänkte jag mig att om jag besöker en adminsida som aktiverar variabeln och därmed avaktiverar funktionen.

Om det av säkerhetsskäl inte går att byta sida och behålla variabeln så undrar jag vilka alternativ det finns
Jag har tänkt på
1. cookies (för avancerat för mig i nuläget för att jag ska begrunda detta alternativ)
2. iframe (kanske kvarstår säkerhetsproblemet)
3. php, "include" där "modersidan" innehåller variabeln

Eller?

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Nix, alternativen är kakor eller sessionsvariabler.

Sessionsvariabler är tillgängliga i ditt serverspråk och kan användas i JavaScript:
var x = <?php echo $myVar; ?>

Så alternativ 3 känns mest rätt.

haiderMedlem sedan jan. 2003956 inlägg
#3

tack Peter,

Så genom att köra var x = <?php echo $myVar; ?> så definierar jag variabeln, stämmer det?
Och när jag vill ladda in värdet, gör jag tex if (x==<?php echo $myVar; ?>) ?

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Precis, så gör du för att definiera variabeln i JavaScript. Även if-satsen som du visar fungerar.

Sedan är jag inte riktigt säker på vad du menar med "ladda in"? För att kolla om en variabel finns i JavaScript kan du använda if (typeof(x) != "undefined") alert("Variabeln finns!");

haiderMedlem sedan jan. 2003956 inlägg
#5

Tack för bekräftelsen Peter.
Med ladda in menar just läsa in värdet för variabeln.

zcorpanMedlem sedan dec. 20042 245 inlägg
#6

Man kan använda window.name för att spara information mellan sidbyten.

dAEkMedlem sedan feb. 20041 816 inlägg
#7

zcorpan skrev:

Man kan använda window.name för att spara information mellan sidbyten.

Jag har sökt lite men hittade ingen info om det här. Du råkar inte ha nån källa där man kan läsa mer om den här metoden? Jag trodde nämligen att windowobjektet tömdes vid sidinläsning. Globala variabler skrivs ju dit och de finns såvitt jag vet inte kvar efter en reload.

Peter SMedlem sedan dec. 20025 483 inlägg
#8

Här finns lite info:
http://www.boutell.com/newfaq/creating/scriptpass.html

Enkelt exempel, sida 1/2:

<script>window.name = "hejhopp";</script>
<a href="sida2.html">Sida 2</a>

Sida 2/2:

<a href="javascript:void alert(window.name)">alert(window.name)</a>

Uppenbarligen bör man inte spara känslig information på detta vis.

dAEkMedlem sedan feb. 20041 816 inlägg
#9

Oj, där ser man. :) Ganska intressant ju även om det inte är nåt man lär använda.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#10

Intressant metod... Den bygger på att window.name lagrar det namn som används för att identifiera en namnen på olika frames och fönster. Varför måste den vara persistent? Jo, för att man ska kunna använda target="..." (Alt. window.open's andra parameter, windowName) för att öppna en sida i en viss frame/fönster. Öppnar man en sida med ett target eller eller windowName som inte existerar, så öppnas först ett nytt fönster, vid andra försöket laddas sidan man vill öppna i det existerande fönstret. Pröva att öppna ett fönster med <a href="http://www.webforum.nu" target="test">Klicka på mig!</a> (alltså genom att klicka på länken) och kör sedan javascript:alert(window.name) i det fönstret. Pröva även att klicka igen på länken...
Att den däremot går att ändra i js i efterhand känns på snudd som ett misstag.
Jag har kollat, och variabeln är persistent, även mellan domäner. (Opera 9.64)
Dock motsvarar window.name ett name-attribut i (X)HTML, och därför kan man bara lagra en sträng där. Troligen finns det även andra begränsningar på vilka tecken som kan ingå och kanske längd. (Jag vet inte på rak arm vad som ev. är förbjudet i name-attribut i (X)HTML)

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