Har läst och läst men får inte till det jag vill. och just ja - "expire" när man stänger browsern, så det blir en ny session nästa besök. Hej, Hej! Det där funkade ju finfint om det är .asp, men jag har för mycket jobb redan sparat för att göra om html. Tänkte - man kanske kan läsa den med javascript. Detta skrev i alla fall cookien jag vill ha: var cookie_name = 'frontdoor'; ytterligare ett: Så skall javascriptet utföra en sak om cookien inte finns, och då kanske en annan sak om cookien finns. Ser ju jättefin (och mycket ) ut. Tack! Nej, det funkar inte. Alltså, tex; NU har jag på nåt sätt fått den att skriva en massa, där 9 av 10 är saker som inte behövs i cookien. Men den gör inte det den ska på sidan 2. Då är frågan om den läser fel, eller om funktionen är fel "if". Jag postar ett iMail till dig med en länk som du kan hämta hem ett komplett kit, som sätter en kaka, och skickar tillbaka till index.html om kakan inte finns. Kan dröja några minuter, håller på att installera om datorn. :) Hmm, då har vi kommit så långt. Mitt lilla knåp gör det vikitgaste; en cookie med ett namn. Och det enda som ska till är att läsa den - namnet räcker, och om det inte finns någon cookie = redirect till index.html. <code> Är det möjligt? Det finns en lösning? =) Näe jag tror faan jag börjar gråta snart. Eller skrika. Det funkade inte... och hela koden - som det står från början till slut = COPY/PASTE i dokumenten som ska ladda om? Inga externa filer, inga delade koder, konstigheter? Den här då? Den kanske (?) hämtar namn, men den levererar/slutar "baklänges". Nu har jag inte läst igenom allting här, men denna kod har jag använt utan problem för att sätta cookies och hämta ut en lista med alla namn/värde. Om det är extremt viktigt att användaren går till index sidan först är det enda rätta att göra en redirect på serversidan. Tack! Nyss fick jag även den här, men inte oväntat fick jag inte helle den att fungera trots att jag försökt fylla i det som ser ut ungefär som där det borde fyllas i (bytte c_name till frontdoor på alla ställen det står c_name). Så ändrade jag på slutet och klistrade in redirect från tidigare exempel, men - icke.. Annat tips jag fått, och som dom flesta andra får jag den inte att fungera. Jag ändrade alla "name" till det namn som min cookie har, och value, och klistrade in - inga externa filer inget konstigt, men - det funkar inte. Du kan inte förvänta dig att någon ska kunna ge dig en lösning på ditt problem utan att ha sett sidan eller källkoden. Alldeles rätt. Vad jag vill är att användare ska gå in till siten via index.html, inte från en direktlänk någonstans [mail/forum/google/whatever].Göra en cookie + funktion
Jag vill att min index ska sätta en cookie med bara en session expire som sedan är giltig för en hel domän och alla sidor. På dom andra sidorna vill jag att browsern läser cookien, och finns den inte ska javascript utföra en funktion. Någon som har ett jättepedagogiskt tips?Sv: Göra en cookie + funktion
Sv:Göra en cookie + funktion
Möjligt att du kan göra det med java-script, använder du något "språk" när du bygger dina sidor? (asp,php osv).
Ex i asp
använder man en session så försvinner den när du stänger webbläsaren.
På första sidan
<%
session("behörighet") = "OK"
%>
På andra sidor
<%
if session("behörighet") <> "OK" then
'Skicka iväg besökaren till någon annan sida,
response.redirect("error.asp")
end if
%>Sv: Göra en cookie + funktion
Tack för svar!
Just nu är det bara .html, och ganska mycket jobb om man skulle göra om alla till tex ASP. Antar att alla sidorna som ska ha "if" måste göras om och sparas .asp i så fall?Sv:Göra en cookie + funktion
Dina båda tips på script ligger i varsitt separat dokument - döpta "correct":
<%
session("correct") = "OK"
%>
och "incorrect";
<%
if session("behörighet") <> "OK" then
response.redirect("error.asp")
end if
%>
i subfoldern "includes". För script A har jag fått den här att funka i index;
<script EVENT="onload" LANGUAGE="VBScript" src="includes/correct.asp"></SCRIPT>
och den ropar snäll på "correct" som lägger en session ID/cookie, men samma script som ropar på "incorrect" fungerar INTE. Den BORDE ladda om filen index, men icke. Går jag direkt på dom respektive ASP funkar även "incorrect".
Tips mottages extremt tacksamt. Sv: Göra en cookie + funktion
function GetCookie(sLabel) {
var Re = new RegExp(sLabel + "correct=([^;]*)");
var retArr = Re.exec( document.cookie );
if( retArr!=null) { return unescape(retArr[1]);
} else { window.location="index.html"; }
men nåt är väl fel.
Det är alltid "roligt" med sånt man egentligen inte kan utan försöket gissa sig fram till med hjälp av logik. Det här fungerade i alla fall inte.Sv:Göra en cookie + funktion
<!--
{document.cookie="Frontdoor=ok";} //-->
Då behövs bara javascriptet som hämtar cookien "om namn *frontdoor=ok gör inget* annars*
Hur månne den se ut?Sv: Göra en cookie + funktion
var cookie_value = 'ok';
else
{ window.location="index.html"; }
annat försök;
function get_cookie(frontdoor) {
var search = Name + "="
var returnvalue = "ok";
else
{ window.location="index-html"; }
Inget som fungerar tyvär. :(
Sv:Göra en cookie + funktion
function checkCookie(frontdoor)
{
value=getCookie('value');
if (value!<>ok)
{ window.location="index.html"; }
Nu kan det väl inte vara långt kvar till en rätt gissning? =) Tips någon?Sv: Göra en cookie + funktion
Du har flera alternativ att göra detta på:
Här är ett litet kodstycke som i javascript som kan hjälpa till, med för del så sätter man getCookie, setCookie och removeCookie i en extern javascript-fil.
<code>
function setCookie(cookiename,cookievalue,daysToExpire,domain,path) {
if(domain)
var cstring = 'domain=' + escape(domain);
if(path)
var cstring = 'path=' + escape(path);
// expire when browser is closed.
if(daysToExpire == 0) {
document.cookie = cookiename+'='+escape(cookievalue)+';';
} else {
var myCookiedate = new Date(); // current date & time.
myCookiedate.setTime ( myCookiedate.getTime() + daysToExpire); // when to expire.
document.cookie = cookiename+'='+cookievalue+';expires=' + myCookiedate.toGMTString() +';' + cstring // setting the cookie.
}
}
function removeCookie(cookiename)
{
var myCookiedate = new Date(); // current date & time
myCookiedate.setTime(myCookiedate.getTime() - 1);
document.cookie = cookiename += "=; expires=" + myCookiedate.toGMTString();
}
function getCookie(cookiename)
{
var results = document.cookie.match ( '(^|;) ?' + cookiename + '=([^;]*)(;|$)' );
if (results)
return (unescape(results[2]));
else
return null;
}
</code>
Här testar vi om kakan finns, och finns den så anropar vi funktionen test(..)
<code>
var kaka = getCookie('test');
if(kaka != null) {
test(kaka);
} else {
alert('Ingen kaka');
}
function test(k) {
alert(k);
}
</code>
När man sätter kakan måste man sätta i vilken domän den är giltig alt. i vilken path den är giltig.
<code>
// Denna cookie fungerar på alla sidor och i alla mappar, under domänen, och lägger till 3 på nuvarande datum och tid.
setCookie('namn','Fredde',3,false,'/');
// Har man mot förmodan följande exempel http://fredrik.malmstroem.info/ alt. http://www.malmstrom.info/fredrik/ detta är samma sida, fast jag kom in på två olika sätt, för att kakan skall vara valid på sidan:
setCookie('namn','Fredde',3,'.malmstroem.info','/');
</code>
Detta var då javascript, skrivs det i ASP, så är det en annan sak. :)Sv:Göra en cookie + funktion
Vad jag gör är att sätta min url/domän inom parenteser för domän? och sen lägga det den där "redirect"? Och sen borde det funka? Kan alltså inte javascript ALLS utan gissar :|Sv: Göra en cookie + funktion
Jag vill bara att den ska lägga in cookie när man går in på en sida.
HUR ser det scriptet ut? Finns det nån snälla som kan hjälpa mig med det? Bara en parameter - "namn" eller något så den "finns". Superenkelt så en idiot (som jag) fattar. Inte 4 olika "domain" som kanske ska ändras utan "skrivdindoämnhär" om det SKA ändras
Det andra scriptet på övriga sidor ska vara "om finns gör inget" om inte finns - skicka till index.html.
Ska funka på undermappar och allt, via flashmeny etc.
Enkelt - inte en massa onödigt och rad på rad jag inte förstår eller behöver.Sv:Göra en cookie + funktion
if(domain)
var cstring = 'domain=' + escape(domain);
ska jag ändra NÅNSTANS, eller överallt på tex "Domain". Ser jag det en gång kan jag lösa det, men här blir det tre gissningar. Med det på alla ställlen blir variablerna oändliga :´(Sv: Göra en cookie + funktion
tillbaka på ruta ett eftersom jag inte vet vad som är vad.
Har någon tips på någon som yrkesmässigt tillverkar javascript som man kan ringa/maila/fråga? Känns som ett bättre alternativ än snart 40 timmar på nåt som inte fungerar. Tacksam för tips på webbyrå/etc.Sv:Göra en cookie + funktion
Sv: Göra en cookie + funktion
Hittat tusen script som splittar cookies, gör "allt", utom det den ska - fungera med redirect om det inte finns någon cookie alls.
Min kod så långt:
function spara(namn, innehall, lagringstid, domain, path) {
lagringstid=parseInt(eval(lagringstid));
if (lagringstid+""=="NaN")
{
datumsnutt="";
}
else
{
var datum = new Date();
datum.setTime(datum.getTime() + lagringstid);
datum=datum.toGMTString();
datumsnutt="; expires="+datum;
}
document.cookie=namn+"="+escape(innehall)+datumsnutt;
}
spara("frontdoor","yes",1000*60*15,"DOMÄN.SE","/");
=======
Bästa (dock ej fungerande) kod så långt för att läsa;
function redirectUser() {
if(getCookie('frontdoor') == null) {
document.location = 'index.html';
Ska ligga i olika kataloger, så helst inga externa filer, superfancy lösningar som blir förvirrande. Väldigt "basic" är bra. Som en idiot begriper :)Sv:Göra en cookie + funktion
function spara(namn, innehall, lagringstid, domain, path) {
lagringstid=parseInt(eval(lagringstid));
if (lagringstid+""=="NaN")
{
datumsnutt="";
}
else
{
var datum = new Date();
datum.setTime(datum.getTime() + lagringstid);
datum=datum.toGMTString();
datumsnutt="; expires="+datum;
}
document.cookie=namn+"="+escape(innehall)+datumsnutt;
}
spara("frontdoor","yes",1000*60*15,"DOMÄN.SE","/");
</code>
<code>
function hamta(namn) {
var results = document.cookie.match ( '(^|;) ?' + cookiename + '=([^;]*)(;|$)' );
if (results)
return (unescape(results[2]));
else
return null;
}
function redirectUser() {
if(hamta('frontdoor') == null) {
document.location = 'index.html';
}
}
// anropa ...
<body onload="redirectUser();">
</code>Sv: Göra en cookie + funktion
Ska det där "anropa" vara precis där?Sv:Göra en cookie + funktion
Sv: Göra en cookie + funktion
Betrakta mig som en idiot.Sv:Göra en cookie + funktion
function hamta(namn)
{
kakor=document.cookie;
kakor_delar=kakor.split("; ");
for (raknare_i=0;raknare_i<kakor_delar.length;raknare_i++)
{
tva_delar=kakor_delar[raknare_i].split("=");
if (tva_delar[0]==namn)
{
return unescape(tva_delar[1]);
}
}
return ""; }
namnet=hamta("Namn");
"om namn inte gör redirect"?!
testade sluta med "else" men det gick ju inte [det heller]
Redirect kanske inte funkar annat än fristående??Sv: Göra en cookie + funktion
Satte till en funktion (otestad) som kontrollerar om en cookie med ett specifikt namn är satt, heter exists.
function Cookies() {}
/**
* Skapar en lätthanterlig Array av alla kakor.
*
* @return Array
*/
Cookies.toArray = function()
{
var arr = new Array();
var splitted = document.cookie.split(";");
for(var i = 0; i < splitted.length; i++)
{
var name_value = splitted[i].split("=");
switch(name_value[0].toLowerCase())
{
case "expires":
case "path":
case "domain":
break;
default:
arr[name_value[0]] = name_value[1];
}
}
return arr;
}
/**
* Kontrollerar om en kaka är satt.
*
* @param string name Namnet på kakan som ska kontrolleras.
* @return bool
*/
Cookies.exists = function(name)
{
var cookies = Cookies.toArray();
return cookies[name] != null && cookies[name] != undefined;
}
/**
* Sätter en kaka.
*
* @param string name Namnet på kakan som ska sättas.
* @param string value Värdet som ska sättas.
* @param Date[optional] expires Datum och tid då kakan upphör. Lämnar man det tomt upphör kakan så fort man stänger ner webbläsaren.
* @param string[optional] path Sökväg under vilken denna kaka är giltig. / är standard, vilket betyder att kakan är tillgänglig på hela siten.
* @param string[optional] domain Domänen som kakan hör till. Behöver inte anges.
* @param bool[optional] secure Säger om kakan enbart får skickas över en säker anslutning till servern (HTTPS). Som standard skickas kakorna över en osäker förbindelse.
*/
Cookies.set = function(name, value, expires, path, domain, secure)
{
document.cookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires.toGMTString() : "") +
((path) ? "; path=" + path : "/") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
Du använder det så här:
// Sätt en kaka
Cookies.set("namnet på kakan", "värdet");
// Kontrollera om kakan finns
if(Cookies.exists("namnet på kakan"))
{
alert("Kakan finns!");
}
else
{
alert("Kakan finns INTE!");
}
// Ta fram alla kakor och skriv ut dem på sidan
var kakor = Cookies.toArray();
for(i in kakor)
{
var kaka = kakor[i];
document.write(i + "=" + kaka + "<br />");
}
Lycka till!
Sv: Göra en cookie + funktion
Om du inte har en massa JavaScript redan som utför allt möjligt är det inte stort arbete att göra om allt till ASP.
Döp om alla filer från .htm(l) till .asp och öppna upp alla filerna i en editor (till exempel Notepad++) och hitta/ersätt alla förekomster av .htm och .html med .asp.
Om du har externa länkar måste du ta hand om dem skilt.
Sedan behöver du bara ha en include i toppen på varje fil som gör en response.redirect til index sidan om inte en kaka är satt. På indexsidan ska du inte inkludera detta asp script utan enbart sätta kakan.
Det är svårt att ge bättre beskrivningar när man inte vet varför du vill göra så här eller vet hur du har byggt upp sidan.Sv:Göra en cookie + funktion
Har kikat och testat, men det verkar som jag får lov att kontakta en webbyrå i morgon - ge dom mitt script, med beställningen "enklast möjliga som fungerar - läser cookien och gör en redirect till index om cookien inte finns". Det kan omöjligt bli dyrare än att ha lagt en hel vecka på det nu =)
Kunda aldrig anat att det skulle vara så näst intill ogenomförbart. En vanlig redirect om man inte kommer fron domänen fungerar ju:
var camefrom = document.referrer;
var findit = "domän";
if (camefrom.indexOf(findit) < 1 )
{ window.location="index.html"; }
Bara rakt in, men stängde tydligen ute IEanvändare som fick en loop när jag använde det i frames. Tänkte att en cookie skulle fungera bättre.Sv: Göra en cookie + funktion
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function checkCookie()
{
username=getCookie('username');
if (username!=null && username!="")
{
alert('Welcome again '+username+'!');
}
else
{
username=prompt('Please enter your name:',"");
if (username!=null && username!="")
{
setCookie('username',username,365);
}
}
}Sv:Göra en cookie + funktion
function GetCookie (frontdoor) {
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
function SetCookie (frontdoor, ok) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = frontdoor + "=" + escape (ok) +
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
((path == null) ? "" : ("; /=" + /)) +
((domain == null) ? "" : ("; domain=" + DOMÄN)) +
((secure == true) ? "; secure" : "");
}
function DeleteCookie (frontdoor) {
var exp = new Date();
exp.setTime (exp.getTime() - 1);
var cval = GetCookie (frontdoor);
document.cookie = frontdoor + "=" + cval + "; expires=" + exp.toGMTString();
}
// window.location.href = url;index.html
}
Den här har jag i alla fall sett på plats, så min tes om att "redirect om ej cookie" inte skulle vara möjligt med javascript är alltså fel. Det ÄR möjligt. Frågan är bara HUR. "Läsa cookie med namn X, om inte finns - redirect till URL Y"Sv: Göra en cookie + funktion
Du kan mycket väl ha något fel på din sida som gör att alla lösningar som givits (och troligen fungerar fint) inte ens körs. Det räcker med att det blir ett JavaScript fel före koden för att den inte ska köras alls.
Har du verifierat att koden körs? Till exempel genom att lägga in ett anrop till alert eller liknande.
Nu är frågan, vad vill du exakt åstadkomma? Vill du hindra folk från att gå in på dina sidor direkt utan att gå via index.htm(l) sidan? I så fall kan du på varje sida som ska vara i en index sida infoga följande JavaScript.
if(window == top)
{
window.location = "index.html";
}
Denna kontrollerar om sidan öppnats direkt eller om den är öppen i en frame. Om den är öppnad direkt slängs användaren direkt till index sidan.
Jag har provat, och detta fungerar helt utmärkt. Får inte du det att fungera ligger felet någon annanstans.
Sv:Göra en cookie + funktion
De sidor som jag testar scripten på har varit blanka - helt fria från övrig kod.
Ditt bifogade exempel fungerade utmärkt. Tack! Jag fick det även att fungera på alla andra sidor, dock INTE på förstasidan för frames, dvs mainframe. Har heller inte testat att köra det i InternetExplorer/PC.
Den här koden fungerar i maiframe;
var camefrom = document.referrer;
var findit = "DOMÄN";
if (camefrom.indexOf(findit) < 1 )
{ window.location="index.html"; }
men den fungerar INTE i IE. När den används i frames skapar den en loop.
Byter jag ut endast kodstycket mot:
if(window == top)
{ window.location="index.html"; }
händer inget alls.