19. april 2001 - 10:18Der er
83 kommentarer og 4 løsninger
window.open
Findes der en måde man kan åben et vindue i baggrunden eller \"skjule\" det for brugern, for det er meningen at der skal skrives til en database nå brugeren forlader siden så onunload=\"\" skal skrive til db en for jeg kan ikke så den til at køre en asp funktion hvor den skriver til db\'en
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
Hmm... Jeg har ret svært ved at forstå hvad du egentlig spørger om...
Men du kan i hvert fald ikke åbne et browservindue, og så skjule det for brugeren. Og hvis du kan, så bør du ikke... ;-)
Måske du skulle oprette en session når folk kommer ind på din side. Så vidt jeg ved kan man definere noget der skal ske, når en session \"dør\". Med en timeout på fx. 30 minutter bliver koden så udført 30 minutter efter den sidste side er hentet fra serveren.
Men prøv at forklare lidt nærmere hvad det egentlig er du vil. Hvis vinduet lukker med det samme igen, så kan du vel lige så godt køre din db-kode med det samme?
hehe ok, Det jeg vil have den til at gøre er at nå brugeren forlader mit site så er jeg intersseret i at se hvilken side som var den sidste han så, det er så jeg kan få en fornemmelse af om nogle af mine sider er så kedelige at brugeren forlader mit site fra dem ;o)
Så nå brugeren forlader sitet skal der skrives til en db, og hvis jeg bruger global.asa og en session_onend så skriver den ikke til databasen nå bugeren forlader sitet, kort sagt den skal på en elleranden måde skrive til db\'en så man forlader siden. og det kan jeg kun få den til ved at lave en onunload=\"window.open(\'side.asp\') og så lukke den efter der er skrevet til databasen.
Der er store problemer med at skrive til DB i session_onEnd, men det kan lade sig gøre at skrive til en TekstFil, på serveren, uden problemer, så gør det i stedet, det er både pænere og ikke så pisse irreterende som en popup.!
Har du slet ikke adgang til logfilerne? Hvis ikke, så lav dine egne. Der kan du finde RIGTIGT meget info, deribland hvilken sider der er den sidste der ses. Hvis du har links ud af dit site kan du lave noget \"sjov\" der registrerer at man klikker på dem. Så kan du også se om de bare forlader sit site, eller om de klikker sig ud af det, og i så fald hvilket link.
Så lav en lile ASP side, eller et lille program, du kan eksekvere der henter alle data fra din vel dispunerede tekstfil, og putter dem i en db, det kan vel ikke være så svært. Men du må da selv bestemme, men husk bare på at pop-ups er roden til alt ondt, også selv om man ikke kan se dem...Du vil nemli altid kunne se dem i din bare, under neden, også blir folk urolige, og tror at du hacker dem....Det er en dum ide.....
Så kan du på samtlige sider skrive til databasen. Altså, nærmest logge i databasen i stedet for en log-fil. Hvis du kun skal have den sidste side, kan du lave dette lille trick: To kolonner: \"SID\" (session-id) og \"lasturl\". Når en session startes opretter du en linje, og indsætter aktuelle url. På hver efterfølgende side ændrer du \"lasturl\" til den aktuelle. Tada... :)
myplacedk -> Hmmm, er det ikke lidt overkill at skrive til en DB, for alle hans sider...! Var det ikke nemmere at skrive til en tekstfil, når hans web forlades ???? Det er jo trods alt kun den information han søger !!!
kasseper> Man må da gå ud fra at kjoller har mulighed for at lægge noget ASP på serveren, og køre det... :) Det kan altså godt lade sig gøre, selv om jeg selvfølgelig synes at mit forslag er bedre... ;-)
Det er selvfølgelig ikke utænkeligt, men langt fra sansynligt.... Og at skrive til en DB, på alle siderne, jeg ville da hurtigt blive træt af det website..!
kassper> Det kommer vel an på om han alligevel har fat i den... Jeg ved at man nogle steder logger i databasen i stedet for til en fil. Og dette er trods at en meeeget simpel log... :) Men nu synes jeg jo så også at det er noget underligt noget, at der skal køres kode når en session dræbes. Men jeg kan ikke se at det skulle være mere problematisk at skrive i DB\'en end at skrive til en fil. Det sidste kræver i øvrigt at filen åbnes, skrives til, og lukkes igen. Og hvad nu hvis to sider vises på samme tid? Det kan kun db\'en håndtere...
Kasseper -> Nu må du lige fange tråden igen. Han vil gerne vide hvilke sider der forlades fra ! Altså når en session dræbes, hvilken url der er... Det er jo fyr fanden da oplagt at gøre det i global.asa, og hvis det nu lige umiddelbart var muligt at lave db transaktioner i session_onEnd, så ville jeg da også anbefale det, men det er det ikke, så fil log er da helt fint. Og med hensyn til at man skal åbne lukke og skrive, hvor er det så lige forskellen, fra en database er henne ???? Den skal da også åbnes, skrives i og lukkes....!. Hvis flere sider skule være åbne samtidig, så ville man ikke ramme session_onEnd, så det er ikke et problem her. Desuden er db transaktion \'Meget\' mere resoucetungt end tekstfil transaktion. Når det altså ikke drejer sig om data fremfindning....!
kasseper> Forskellen er, at det (mig bekendt) er mere ressource-krævende at skrive til en fil, end en database. Databasen er beregnet til hele tiden at få forbindelser der skal læse og skrive en lille smule, det er filsystemet ikke. En anden forskel er, at hvis du skriver til databasen på samme tid, er der ingen problemer. Det kan man ikke med en fil... Men jeg skal da gerne indrømme at jeg er grøn inden for ASP, og aner ikke hvad \"global.asa\" er for en fisk. :)
og til din kommetar kl. 11:04:37 Så ville jeg være det som besøgende..... Og de ville da mærkenoget til det, lad os sige at kjoller har en side der har 100.000 hits om dagen, og måske op til 100 samtidige bruger, hvis der så skal skrives til Db, for hver gang en ny side hentes ind, så vil DB, blive overbelastet i en sådan grad, at jeg kan love dig at man vil kunne mærke det.... Jeg tror at du vil få et lag på omkring 120 - 150 %.....!
kasseper> Hvis han har 100.000 hits om dagen, så har han nok også en database der kan håndtere det. Og mere sandsynligt: Han vil have adgang til logfilerne, og vil bruge dem i stedet, som alle andre gør.
til myplacedk 11:11:52 -> Når en database skal åbnes skal den bruge en driver, den skal hentes, den skal måske connecte til en database der ikke er lokal, men som i de fleste tilfælde er ekstern, altså en forbindelse over en datavej, der ikke ligger på en intern bus hastighed....! Det tager tid....! filsystemet er beregnet til at åbne og lukker filer, også for at tilføje en lille smule. I gamle dage havde man ikke relationelle databaser, men brugte istedet filer til at opbevare data i. Derfra er filsystemet udviklet, og det er ikke spor resourcekrævende at åbne og lukke en fil. At FSO så ikke er det mest optimale værktøj til det, det er en anden sag, men nu er vi jo bevæget os ud i det teoretiske....! Det kan være at du er PHP mand ???? det ved jeg ikke, men der har du vist nok mulighed for at bevare en connection til en base, men sådan er det ikke i ASP, der er det kun serverside der kan kommunikere med basen, altså skal skidtet åbnes og lukkes ret ofte.... Man kan benytte connection pooling, men når det kun er til dette formål, med en information om hvor man hoppe af hans web, så vil jeg på det kraftigste FRARÅDE at bruge en database...! ihvertfald på denne måde,.-!
kasseper> Også PHP... :) Min erfaring med større sites siger, at man bør undgå at skrive til filer ved hvert sidefremvisning. At skrive til databasen derimod er intet problem. Men det er også under forudsætning at man har en fornuftig database-løsning. Dvs. en DB der kan håndtere den trafik den får, og selvfølgelig LAN forbindelse til den. Ved mindre sites er det vel underordnet. Men jeg spekulerer stadig på den med \"to hits på samme tid\"...
Uden helt at hae læst det hele igennem. Kan man ikke bare lave et onUnLoad Script der submitter en skjult form med document.this.title (eller den stil), når vinduet forlades. Så vil der ihvertilfald ikke være nogen problemer med popup. Anyway ved jeg ikke helt om det kan lade sig gøre 100%, men jeg vil tro det...
Det har jeg også kigget på, men kan man få et javascript til at skrive i en db? eller udføre en asp function for man kan ikke kalde en aspfunction via onunload
Man kan ikke få javaScript til at skrive i en DB, men du kan jo kalde et ASP script via en form, der submittes ved onUnload. Formen kunne jo så have en værdi svarende til document.this.title...
myplacedk -> Som du selv siger har du ikke tjeck på global.asa, men så kan jeg jo fortælle dig at der findes en funktion i denne fil der hedder session_onEnd, som bliver kaldt når en bruger med en session forlader hans web, altså ikke ved hvert eneste side, som er mit STORE kritik punkt af din løsning. Her i kan man lægge noget logik, der skriver til en log-FIL på serberen. Intet problem, og hvis du har erfaringer med større sites, så kan jeg ikke begribe at du endnu ikke har støt på fil transaktioner....! Du har så gangske ret i at der ikke er nogen problemer i at skrive til en database, men ved hver sidefremvisning, vil det uvilkårlig give flaskehalse...! Og to hits på sammetid, vil jo ikke være et problem, da der åbnes en instans af filen, og der skrives så til den, pluds at man jo bare kan lave en Applicaton.Lock inden, så er synkroniseringen jo hjemme. Nøjagtigt som man ville gøre med database transaktioner...!
kasseper> Jeg ved godt man kan køre kode når en session dræbes... :) Jeg vidste bare ikke at man definerede det via global.asa. Og jeg beklager: Jeg ved ikke hvad \"fil transaktioner\" det er. Men hvis du kort fortæller hvad det er, så kender jeg det sikkert. :) Men som jeg ser det er det ikke kun det sidste \"hit\" der er interessant. Det er ALLE hits. Men hvis han absolut kun vil have sidste hit, og aldrig vil have mere, så kan jeg godt se at din løsning kan være lige så god.
Kasseper - Ja gode diskussioner er altid velkome. Godt nok fatter jeg minus af sessions og alt muligt andet serverside sludder, men jeg kan lide tonen og prøvede da ihvertilfald at komme med et alternativ til det i spørgsmålet foreslåede....
Forresten, javascript kan selvfølgelig godt skrive til en db, hvis man lige putter lidt serverside imellem. Når jeg skal sende data til severen via javascript gør jeg det ved at hente et \"billede\". Dataen jeg skal sende kommer så med som parameter, og serveren returnerer et lille-bitte billede, som lige er nok til at javascriptet ikke giver fejl.
kjoller> Jaja, det ved jeg godt. Jeg forstod fint dit spørgsmål. Men hvad så med \"i morgen\"? I dag (nu) vil du vide hvad den sidste side er. I morgen vil du vide hvad den første er. I næste uge vil du vide vil rute den besøgende tog fra den første til den sidste side, og dermed med om MWR er opnået. (Most Wanted Response) Tag altid udgangspunkt i at dit projekt udvikler sig. :)
nikolajdu> Hmm... OK, jeg fokuserede på at du ville lave noget \"onUnload\" hvilket ikke gav nogen mening for mig. Urlen er jo den samme når du GÅR IND på siden og når du FORLADER siden. Jeg ville derfor registrere hvad der skal registreres når man går ind på den, i stedet for at stole på noget javascript. Men hvis han nu kører med frames giver dit forslag jo egentlig mening. Altså med en onUnload på framesettet... Men jeg ville nu være MEGET ked af at bruge clientside-script til den slags. :)
myplacedk -> tro nu ikke at jeg har kastet håndklædet i ringen, jeg var bare til frokost :) Fil transaktion er jo sådan set bare at sende noget data til en fil. Anyway, så vil jeg mene at performance spørgsmålet ikke er et punkt hvor vi når en enighed. Så kjoller \'do what you like\' men pas nu på med alt for meget database kommunikation...
kasseper> OK. Jeg HAR arbejdet med at sende data til filer... :) Også laaang tid før jeg arbejdede med større sites... :) Og nej, vi er ikke enige mht. performance. :) Kjoller, du vælger bare den løsning du bedst kan lidt, men pas på du ikke overdriver brugen af filsystemet... ;-)
Du kan kalde noget ASP med javascript på følgende måde. Lad os sige at vi skal overfører data \"var1\" og \"var2\": if (document.images) { querystring = \"/noget.asp\" + \"?var1=\" + escape(var1) + \"&var2=\" + escape(var2); noget = new Image(); noget.src = querystring; }
Jamen, fyr fanden da, han kalder sq da ikke noget ASP kode, han kalder en ASP side, som så udføre noget ASP kode på serverene, men hold da kæft et kæmpe HACK. Det er da ikke \'pæn\' kode det der...!
kasseper> Kæmpe hack og kæmpe hack... Det kommer an på... :) Hacket består i at bruge javascript til at kalde asp-kode med. Men hvis det er det du vil, så er det måden... Kan du komme med noget bedre? Og selvfølgelig kalder han noget ASP-kode. Nemlig det der står i \"/noget.asp\".
Jamen, det er jo oftest meningen at en ASP, side skal returnere noget til browseren, ikke i form af et billed, men i form af noget HTML tekst eller slet intet. Det du gør at client scripts til at loade noget fra serveren, som clienten i hvikeligheden ikke forstår, fordi den regner med at der skal komme et billed tilbage. Den \'rigtige\' måde ville være at lave en hidden fram der opdateres med en .asp side, med diverse querystrings parametre....! Som du selv siger det så kan javascript enginen også kun klare ganske få parametre, ved din metode, mens man med min kan lægge så mange som man plejer på. !!!!!
kasseper> Hvis man skal læse svaret må man kalde en html-side. Men så kan man lige så godt bruge et link eller en form, alt efter hvordan de data der skal sendes opsamles. Den metode jeg beskrev kan i øvrigt sende præcis lige så mange data som et almindeligt link.
Det findes ingen javascript-funktioner til at sende data til en server. (Men man kan hente sider med parametre.) Hvis man vil sende data til serveren må man bruge et hack. Hvis du kan komme med et hack der er pænere end mit er jeg meget interesseret. (Det er det hack jeg bruger, når jeg skal sende data til en server men ikke vil have et svar.)
Det er det nærmeste man kan komme ikke at få et svar. Brugeren ser intet. Der er ingen vinduer der skifter indhold (ikke engang en 1x1 iframe) eller noget som helst. Det eneste der er synligt er, at browseren henter \"noget\". Tager typisk under et sekund...
kjoller> Det må du selv om... ;-) Hvad skal aktivere det? Skal det ske når du forlader siden eller hvad? Så skal det bare i en funktion der kaldes ved \"onUnload\"... chicken> Ja, gu\' er det et hack. Men så længe det ikke er et beskidt hack er det da helt fint... :)
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.