Avatar billede thomas_b Nybegynder
20. august 2007 - 22:54 Der er 54 kommentarer og
1 løsning

Opret og læs cookie

Hej...

Mit problem er lidt at ASP-cookie læser den på den forkerte måde så jeg vil prøve med javascript cookie...

Jeg skal have et script til at læse en cookie der hedder: "count"

Og så skal jeg have et script der laver en cookie der hedder "count" ud fra et parmeter fra ASP !!!


NOgle der kan hjælpe med dette problem...?
Avatar billede thesurfer Nybegynder
20. august 2007 - 23:23 #1
Du kan smide følgende kode i en .js fil: http://www.quirksmode.org/js/cookies.html#script

så kan du inkludere den med f.eks. :

<script type="text/JavaScript" src="filnavnet.js"></script>.

Så kan du bruge kommandoerne createCookie, readCookie og eraseCookie som anvist på http://www.quirksmode.org/js/cookies.html
Avatar billede thesurfer Nybegynder
20. august 2007 - 23:24 #2
Hvis du via ASP udskriver værdien til JavaScript, kan JavaScript bruge værdien..

Eksempel:

<script type="text/JavaScript">
var besked = "hello <% response.write "world" %>";
alert(besked);
</script>

Så vil JavaScript udskrive (via en alert/dialogbox):  hello world
Avatar billede thomas_b Nybegynder
21. august 2007 - 00:04 #3
Nu laver den en ASP-fejl...
Er det noget du kan rode ud af ?
Avatar billede olebole Juniormester
21. august 2007 - 12:34 #4
<ole>

"Nu laver den en ASP-fejl..." >> mon ikke det var idé at fortælle, hvad fejlen siger?  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
21. august 2007 - 12:35 #5
- og vise koden, der udløser fejlen
Avatar billede thomas_b Nybegynder
21. august 2007 - 15:24 #6
Hej Ole... havde besluttet mig og lave scriptet om...
Men det har resulteret i en fejl på Javascriptet...
Har denne kode:

<script>
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 ""
}

alert('henter cookie:'+ getCookie('count'))
</script>

den kan simpelhen ikke finde nogen værdi...!
Avatar billede thomas_b Nybegynder
21. august 2007 - 15:26 #7
Hele koden ser således ud...:

værdi "sætter cookie:" = "51"
værdi "henter cookie:" = ""

<script>
alert('sætter cookie:<%=cookie_count%>')

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())
}
setCookie('count',<%=cookie_count%>,'365')

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 ""
}

alert('henter cookie:'+ getCookie('count'))
</script>
Avatar billede olebole Juniormester
21. august 2007 - 15:38 #8
Det her spiller som en mis:

<script type="text/JavaScript">
alert('sætter cookie: 0.5')

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())
}
setCookie('count',0.5,'365')

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 ""
}

alert('henter cookie:'+ getCookie('count'))
</script>
Avatar billede olebole Juniormester
21. august 2007 - 15:41 #9
- men jeg ville nu slette gåseøjnene om dag-antallet:
    setCookie('count',0.5,365);

Du kan teste forskellen på med og uden gåseøjne her:

function setCookie(c_name,value,expiredays)
{var exdate=new Date()
alert(exdate.getDate()+expiredays)
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}
setCookie('count',0.5,365);
setCookie('count',0.5,'365');

- pokkers til forskel  ;D
Avatar billede thomas_b Nybegynder
21. august 2007 - 15:51 #10
du kan se her...: http://www.ibetthat.net/

Den hvide kasse i højre hjørne...
Avatar billede olebole Juniormester
21. august 2007 - 17:13 #11
Det ser da meget rigtigt ud ... jeg får både sat og læst kagen  =)
Avatar billede olebole Juniormester
21. august 2007 - 17:15 #12
Ahhhh .... nu forstår jeg. Kagen sættes/læses under ét domæne (i iframe'en) og det går fint - men den kan ikke aflæses under et andet domæne
Avatar billede olebole Juniormester
21. august 2007 - 17:27 #13
- men der er nu andre meget væsentlige problemer med sitets kode. Har du set den i andet end IE?  =8-O

En tredie ting er navigationen med transparente png-24 billeder. Læg mærke til, de transparente områder ikke er aktive som links, når browseren er IE6  :)
Avatar billede thomas_b Nybegynder
22. august 2007 - 08:31 #14
Men er vi ikke enige om at den sætter cookie og derefter sætter den i samme vindue!
Hvordan kan man få det til at virke ??
Og hvad for en browser kigger du siden igennem med ??
Avatar billede thomas_b Nybegynder
22. august 2007 - 08:32 #15
Navigationen ville jeg lave om på... så den fik et transperant gif billede foran...! :)
Avatar billede thomas_b Nybegynder
27. august 2007 - 01:10 #16
Ole... er det muligt og lave at lave sådan så hvis der f.eks. ikke findes nogle cookie på brugerens pc så vil den gå i et iframe-vindue loade en side hvor der så bliver retuneret en værdi tilbage til hoved-vinduet... alt sammen uden at hovedvinduet bliver reloadet ?
Avatar billede olebole Juniormester
27. august 2007 - 03:35 #17
Du kan ikke scripte på tværs af domæner - det gælder også for brug af cookies. Hvis du fortæller præcis, hvad det er, du vil opnå, kan det være, vi kan komme med et alternativ
Avatar billede thomas_b Nybegynder
27. august 2007 - 14:08 #18
Hej ole... jeg prøver...

Jeg kalder siden http://www.ibetthat.net/ for hoved-vindue
og iframe-siden for under-vindue...

I under-vindueet loades der et script der sender oplysninger omkring besøgene (statestik) og der for hver bruger et unikt nummer via en cookie i henhold til brugerens IP...

Også så for at fastslå om brugern i hoved-vinduet er 1, 2 eller 3 gangs besøgene skulle den gerne kunne finde den cookie...!

Håber jeg har forklaret det nogenlunde godt...?
Avatar billede olebole Juniormester
27. august 2007 - 17:17 #19
Når jeg højreklikker i det hvide rektangel og vælger 'Egenskaber', ser jeg denne URL:
    http://www.mollo.dk/?usernr=0701203402&count=30&ref=http://www.eksperten.dk/spm/792643

- det er forsøg på cross-domain-scripting  =)
Avatar billede olebole Juniormester
27. august 2007 - 17:20 #20
mollo.dk kan sætte en kage, mollo.dk kan læse - men ikke en, ibetthat.net kan læse
Avatar billede thomas_b Nybegynder
27. august 2007 - 17:30 #21
Og det kan ikke lade sig gøre eller hvad ?
Hvis nej... Hvordan kan man så løse problemmet ? Hmm...
Avatar billede thesurfer Nybegynder
27. august 2007 - 22:11 #22
thomas_b> Hvad er det du vil med den cookie?
Avatar billede thesurfer Nybegynder
27. august 2007 - 22:11 #23
Hehehe.. havde liget overset 27/08-2007 14:08:26.. :-)
Avatar billede thesurfer Nybegynder
27. august 2007 - 22:13 #24
I stedet for at sætte en cookie, hvor der f.eks. står = "visninger=30", skal du smide det i urlen..

Eksepel: mollo.dk?visninger=30

Så kan mollo.dk aflæse det, selvom linket kommer fra ibetthat.net..
Avatar billede thomas_b Nybegynder
28. august 2007 - 14:58 #25
Jo det kan den godt...

Men lad os antage at der er 100 computere på en skole en lære går ind og kigger på siden... og for logget sin IP samt et unikt nummer... måske 5...

Så skal den næste computer fra skolen der kommer ind på siden... den skal jo så hede 6 og det skal den jo ind og chekke i min database på mollo.dk!

Så den skal tjekke hvilket tal den skal give den nye bruger, sende det til mollo.dk som så skal retunere en værdi til ibetthat.net
Avatar billede olebole Juniormester
28. august 2007 - 15:01 #26
Du skal retænke hele opbygningen af din statistik-service - og måske vente, til du har helt styr på, hvad man kan og ikke kan  ;o)
Avatar billede thomas_b Nybegynder
28. august 2007 - 15:02 #27
Men igen... det må jo være muligt...
Hvordan har alle de andre countere så lavet deres ? Hmm
Avatar billede olebole Juniormester
28. august 2007 - 15:10 #28
1) Hvis det er en service, du har i sinde at udbyde, skylder du evt. kunder at vide noget mere!
2) Du kan ikke scripte på tværs af domæner ... det er der ingen, der kan
3) Du er havnet i en blindgyde, hvor du ikke kommer længere og er nødt bruge helt andre fremgangsmåder
Avatar billede thesurfer Nybegynder
28. august 2007 - 15:55 #29
Der er ikke noget i vejen for, at ibetthat.net kalder et scripet på mollo.dk, som henter id ud fra en database, og derefter returnere det, for at ibetthat kan sætte værdien i en cookie..

Eksempel med pseudo kode:

Definitioner:
ibetthat.net = A
mollo.dk = B


A:
<script type="text/javascript" src="http://www.B.dk/stat.php"></script>
<script type="text/javascript">

function lavstat
{

v = LæsCookie;
HVIS v ER TOM
{
  CookiensVærdi = SætStatId
} ELLERS {
  // ELLERS-betingelsen er muligvis overflødig
}

}

</script>


Og filen stat.php, hvor nedenstående kode er pseudo kode, ser nogenlunde sådan ud:

function SætStatId
{

id = <?php

sql = "select top 1 from TabellensNavn where ip = '" . KaldetsIP . "'";
// afvikel sql

ResultatID = row["IdFeltet"];

echo ResultatID;

?>;

return id;

}


Det burde vel virke, hvis man fik lavet koden rigtigt, i stedet for pseudo koden.. eller noget.. :-)
Avatar billede thomas_b Nybegynder
28. august 2007 - 16:30 #30
Jeg laver i asp... :/
Avatar billede thesurfer Nybegynder
28. august 2007 - 16:45 #31
Så sådan da :-)

id = <%
' opret forbindelse til databasen, og så:

sql = "select top 1 from TabellensNavn where ip = '" & KaldetsIp & "'"
set rs = conn.execute(sql)
if not rs.bof or rs.eof then
  id = rs("IdFeltet")
else
  id = 1
end if
rs.close
set rs = nothing
conn.close
set conn = nothing
response.write id
%>;

Jeg har ikke testet ASP koden, men det kunne du jo gøre.. :-)
Avatar billede thomas_b Nybegynder
28. august 2007 - 16:48 #32
Ja... men hvordan sender jeg den til ibetthat.net ?`?
Avatar billede thesurfer Nybegynder
28. august 2007 - 17:08 #33
Du sender den ikke... det er ibetthat.net der henter den via:

<script type="text/javascript" src="http://www.B.dk/stat.asp"></script>
Avatar billede olebole Juniormester
28. august 2007 - 17:36 #34
thesurfer >> Hvordan læser B en kage, som A har sat?  :)

Din kunde 'ibetthat.net' skriver dette i stedet for en iframe:
    <script type="text/JavaScript" src="http://www.mollo.dk/sti/til/fil.asp?usernr=0701203402"></script>

I dokumentet 'fil.asp' står de to cookie-scripts. Lad os sige, du aflæser cookie-værdien i 'fil.asp' og lægger værdien i variablen 'cookVal'. Så laver du en ny forbindelse til din server med denne kode, som også står i 'fil.asp':

var o = document.createElement("script");
o.setAttribute("type", "text/JavaScript");
o.setAttribute("src", "http://www.mollo.dk/sti/til/stat.asp?count=" + cookVar + "&usernr=0701203402");
document.getElementsByTagName("head")[0].appendChild(o);

- hvor dette er skrevet dynamisk ind i JS-koden af 'fil.asp':
    usernr=0701203402
Avatar billede thesurfer Nybegynder
28. august 2007 - 17:55 #35
Man kan stadig ikke læse cookies på tværs af domæner :-)
Men man kan sende indholdet af cookien til de andre domæner, via urlen.. :-)
Ellers var der ikke nogen ide i at bruge JavaScript til at indkludere en ASP fil på det andet domæne..
Avatar billede thomas_b Nybegynder
28. august 2007 - 18:05 #36
Hvorfor virker dette ikke... nu jeg vil teste det med en alert...?

<script type="text/javascript">

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())
}




if (getCookie('count') == "") {
cookiensvaerdi = SætStatId(id)
} ELLERS {
cookiensvaerdi = getCookie('count')
}

setCookie('count',cookiensvaerdi,'365')


cokny = getCookie('count')
alert ('-'+ cokny +'-')


</script>
Avatar billede thesurfer Nybegynder
28. august 2007 - 18:21 #37
"ELLERS" ? :-)

Det er jo pseudokode, dvs, ikke rigtig kode..

Pseudokode bruges til at *beskrive* noget kode..

Eksempel fra http://en.wikipedia.org/wiki/Pseudocode#Examples_of_pseudocode:

En beskrivelse af koden:

<?php
if (is_valid($cc_number)) {
    execute_transaction($cc_number, $order);
} else {
    show_failure();
}
?>

kunne f.eks. være:

if credit card number is valid
    execute transaction based on number and order
else
    show a generic failure message
end if
Avatar billede thesurfer Nybegynder
28. august 2007 - 18:22 #38
Husk at afslutte alle dine sætninger/linier med semi-koden:

if (getCookie('count') == "") {
  cookiensvaerdi = SætStatId(id);
} else {
  cookiensvaerdi = getCookie('count');
}

osv..
Avatar billede thomas_b Nybegynder
28. august 2007 - 18:32 #39
Hehe... laver ikke js normalt...

Øhhhm... Hvis du reloader ibetthat.net alskelige gange kommer den med en fejl...!
Avatar billede thesurfer Nybegynder
28. august 2007 - 18:45 #40
Hvordan ser hele din kode ud?
Avatar billede thomas_b Nybegynder
28. august 2007 - 18:52 #41
A:

<script type="text/javascript" src="http://www.mollo.dk/www/mollo.dk/stat.asp?url=<%=Request.ServerVariables("REMOTE_ADDR")%>"></script>
<script type="text/javascript">

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())
}


if (getCookie('count') == "") {
cookiensvaerdi = SætStatId(id);
} else {
cookiensvaerdi = getCookie('count');
}

setCookie('count',cookiensvaerdi,'365')

cokny = getCookie('count')
alert ('-'+ cokny +'-')

</script>

B:
function SætStatId(id){
id = <%

SQL = "SELECT top 1 * FROM log WHERE ip='"& Request.QueryString("url") &"' ORDER BY count desc"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2
if rs.EOF=false then
sidst_tal_count = rs("count")+1
else
sidst_tal_count = "1"
end if

%>;
}
Avatar billede thesurfer Nybegynder
28. august 2007 - 19:11 #42
Så vidt jeg ved, er ÆØÅ og andre specialtegn ikke tilladt i JavaScript-scripting.

Id skal også returneres med: return id;

Jeg kan ikke lige se, hvad det er du sender med her:

cookiensvaerdi = SætStatId(id);

Så hvad er det lige at du tager imod her?: function SætStatId(id){


Her det alt hvad der er i HTML filen, som du har dit JavaScript i?
Avatar billede thesurfer Nybegynder
28. august 2007 - 19:13 #43
Rettelse: Er det alt hvad der er i HTML filen, som du har dit JavaScript i?

Husk at læse hele forrige indlæg, flere gange, hvis nødvendigt for at du forstår/følger det..

Hvis der er noget du ikke forstår, skal du sige det øjeblikkeligt, så vi ikke spilder tid på noget jeg *tror* at du ved.. :-)
Avatar billede thesurfer Nybegynder
28. august 2007 - 19:15 #44
Og så er IP-delen overflødig:

?url=<%=Request.ServerVariables("REMOTE_ADDR")%>

Så vidt jeg ved, kan du altid aflæse IP adressen på computeren der kalder din fil, ved at bruge Request.ServerVariables("REMOTE_ADDR")..

Så du kan nøjes med:

<script type="text/javascript" src="http://www.mollo.dk/www/mollo.dk/stat.asp"></script>

Men mon ikke at det er en god ide, at sende usernr med (hvad end det skal bruges til)..?
Avatar billede thesurfer Nybegynder
28. august 2007 - 19:34 #45
Hvis du får en fejl, kopier hele fejlmeddelelsen, og linien der er fejl i..

Indlæg som "kommer den med en fejl" kan jeg ikke bruge til en sk!.. :-)

Hvis jeg siger til dig "der gik noget galt", aner du jo heller ikke hvad jeg snakker om.. :-)
Avatar billede thomas_b Nybegynder
28. august 2007 - 20:56 #46
Nu står det således...:

A:
<script type="text/javascript" src="http://www.mollo.dk/www/mollo.dk/stat.asp"></script>
<script type="text/javascript">

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())
}


if (getCookie('count') == "") {
cookiensvaerdi = statid;
} else {
cookiensvaerdi = getCookie('count');
}

setCookie('count',cookiensvaerdi,'365')

cokny = getCookie('count')
alert ('-'+ cokny +'-')

</script>


B:
function statid{
id = <%

SQL = "SELECT top 1 * FROM log WHERE ip='"& Request.ServerVariables("REMOTE_ADDR") &"' ORDER BY count desc"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2
if rs.EOF=false then
sidst_tal_count = rs("count")+1
else
sidst_tal_count = "1"
end if

%>;
return id;
}

den kommer med en fejl i linien: "return id;"
Avatar billede thomas_b Nybegynder
28. august 2007 - 20:59 #47
tegnet '(' var ventet
Avatar billede thomas_b Nybegynder
28. august 2007 - 21:01 #48
der går lige en time før jeg svare igen...
Avatar billede thesurfer Nybegynder
29. august 2007 - 19:36 #49
Fejlen er højst sandsynligt her:

function statid{

Det skal være:

function statid() {

Husk at afslutte JavaScript-sætninger med ";" tegnet.. pånær funktion-start-linier, if-linier og ligende..
Avatar billede thesurfer Nybegynder
29. august 2007 - 19:46 #50
og: cookiensvaerdi = statid();

:-)
Avatar billede thomas_b Nybegynder
29. august 2007 - 21:07 #51
Nu er der en fejl på selve siden (nede i venstre hjørne) linie 4 tegn 6 - men i den linie er der ingen Javascript !!!
Avatar billede thesurfer Nybegynder
30. august 2007 - 00:21 #52
Det er JavaScript linier, og ikke almindelige linier..

Som du kan se i mine eksempler, udskriver jeg id.. det gør du ikke.

Derfor:

response.write sidst_tal_count
%>;
return id;
}



Jeg siger det igen:

Beskeder som "der er en fejl" kan ikke bruges til en sk!d.
Enten skriver du hele fejlmeddelelsen, eller også lader du vær med at skrive noget overhovedet.
Avatar billede thomas_b Nybegynder
05. december 2007 - 09:28 #53
Nogle svar... :)
Avatar billede thesurfer Nybegynder
05. december 2007 - 15:57 #54
Her er et svar :-)
Avatar billede thomas_b Nybegynder
05. december 2007 - 17:07 #55
vers'go :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester