02. april 2004 - 00:34Der er
77 kommentarer og 2 løsninger
Onunload, men ikke aligevel
Hey. Jeg skal have min hjemmeside til at udføre et stykke kode når man trykker på det lille kryds i toppen. Jeg troede jeg kunne gøre det ved at bruge en onunload i Body, men det lader til at den udføre koden når man også opdatere siden, det er ikke meningen....
Klart nok. Men hvordan for jeg den så til KUN at loade min Function, når der enten trykkes på kryds, og hvis de diregere sig væk fra siden, hvis det sidste er muligt. Men ihvertfald hvis de lukker siden..???
Men det forhindre ikke opdatering 100%, og jeg skal sku være 100% på at den side ikke laver koks i det, da det er en User Online Application jeg skal have den til at lave en - på....
Function Logaf() Application.Lock Application("OnlineUsers") = Application("OnlineUsers")-1 Application.UnLock Function
Kan jeg på en eller anden måde lave den Alert, og så få den til at udføre den Function ved tryk på OK, og bare opdatere siden, eller lave intet ved Annuller.??
ASP koden afvikles på serveren. Dvs, siden skal (re)loades for at du kan udføre asp kode. Du kan have din asp kode i hovedsiden, og smide data over i iframen, hvis du vil.
Nu ved jeg ikke hvad du har af kode.. det nemmeste ville være, smid du kunne oploade din side.. så kan vi nemmere se hvordan det foregår..
Det lyder umiddelbart som noget .Net, så Application har sikkert en del med sessions at gøre (jeg aner det ikke !-)
Men hvis du har 3 iframes, kunne du måske have en fjerde skjult iframe, som med korte mellemrum vedligeholdt din session, og hvis den ikke var blevet veligeholdt indenfor f.eks. mellemrummet + 20% så blev den nedlagt ...
Session bliver kun gemt på browseren. Application er på en måde en Session, bortset fra at den gemmes på serveren og er til gængelig for alle, så tror ikke Sessions er det man skal bruge til at holde styr på Online Users
Du kan ikke kalde på ASP kode, fra html siden.. Der kan du kun kalde på VBScript og JavaScript, da de 2 scriptsprog er klientside.. ASP er serverside scriptsprog..
Forstil dig at du skal sidder i stuen (klient side, browseren), og er sulten. Maden (asp koden) er i køkkenet (server side, serveren). Hver gang du vil ha' noget map (asp kode), skal du smutte ud i køkkenet..
ja ja, det er jeg sku klar over....ASP bliver fortolket af serveren og oversat til HTML og sendt clienten. Det ved jeg. Men det er stadig det ASP kode der står i dokumentet der bliver afviklet
Et ofte anvendt trick er at åbne et vindue, som kan medføre en fortolkning server-side, derefter skriver serveren så den kode, som selv lukker vinduet !-)
Men der er et problem.. De fleste der bruger internettet, kan ikke lide reklame-popup.. så de installerer en eller anden form for popup-blocker, så de der popup-ikke kommer frem.. Den der popup-blocker vil også forhindre "logud.asp" i at blive loadet.. Det betyder at antal af "online users" vil stige hele tiden, og aldrig falde..
Tja. Ca, ved hver 6 - 7 opdating af siden, der springer den Onunload af, og så vokser talet med en for mange for hver af de gange det sker. Men bortset fra det så virker det, men fatter nu ikke hvorfor unonload bliver sprunget over nogen gange..??
Det er fordi onunload udføres i et adresse-rum, som er under nedlæggelse, så hvis der er det mindste i vejen, kan der være problemer med at få tid til at udføre http-requsten ...
Præcis derfor mit råd i den ovennævnte om at vedligeholde sessions og så sætte timeout på !-)
I iframen indsætter du en mini-side, som alene vedligeholder en session i din application, dvs. du tildeler hver åbnet side et unikt id, som du vedligeholder via en tabel i din Application ...
asp-koden, som genererer siden opretter en id eller tildeler den id et nyt tidstempel ...
Så laver du server-side en rutine, som kører f.eks. hvert 5. sekund og checker hvor lang tid siden det er, at et givet id sidst har requestet, er det f.eks. mere end 10 sek. nedlægger du id'et, for så må siden være lukket.
Initieringen af iframen klarer du ved, at du i genereringen af siden, laver en onload på en af de sider, som hører med, og så kalder start-siden til iframen:
Ved reload af hele siden checker du referrer, for at sikre dig, at du ikke knalder op og ned (men egentlig kan du være ligeglad, for indenfor få sekunder vil det alligevel være rigtigt !-)
Ok. Så blev jeg sku aligevel for Noob til at fatte i aften. Lad os se. Hvis en bruger logger af, hvordan skal jeg så få det I frame til at tjekke brugerens forhenværende Session ID..?? Det kræver jo at brugeren er online mens siden reloades/ for at siden reloades for at være precis....
Se, jeg kan lave så brugeren f.eks har en ID der hedder brugerens IP, og få den Session til at lave en timeout efter et hvis antal tid osv...Og hvis brugeren så ikke er logget af, men gør sig aktiv ved f.eks at trykke på et link, få Iframet til at tilføje IDen igen, og på den måde få talet til at passe for det meste, men ihvertfald få det til at en nogen lunne lige kurs....MEN som sagt, det kræver at jeg hele tiden kan udføre et stykke kode, og hvis brugeren er logget af
Men selvf. Talet vil jo hele tiden være næsten up to date bare EN bruger er online, og så længe ingen er online er det ligemeget, for så updatere det igen, lige så snart en bruger kommer på
Når. Mangler svar.... Mere besværlig måde, men til gengæld også den mest precise. Træls at stå efter to dage med et online user tal på 250, og der kun er 2 *G*
men jeg tror nu alligevel vi lige går (skriver) lidt forbi hinanden :o)
Man kan som du skriver i "00:56:57" sagtens checke for evt. timestamps i en session, alternativt vha. javascript...hvis givne regler ikke er opfyldt vil asp tømme den, meen, jeg mener som følger at asp automatisk kunne stå for den slags, det lyder til at han server har et problem , eftersom den ikke har fjernet en eneste efter 2 dage :o)
nedenstående gemmes bare i global.asa i roden af et website :o)
Sub Application_OnStart Application("ActiveUsers") = 0 End Sub
Sub Session_OnStart Session.Timeout = 1 //antal minutter :o) Session("Start") = Now Application.Lock Application("ActiveUsers") = Application("ActiveUsers") + 1 Application.UnLock End Sub
Sub Session_OnEnd Application.Lock Application("ActiveUsers") = Application("ActiveUsers") - 1 Application.UnLock End Sub
På ovennævnte måde vil det hele foregå fuldautomatisk :o), dog med et delay på et minut!
Se den global.asa ting har jeg prøvet. Problemet ved den var at den ikke registrede Session_OnEnd. Så folk kom ind, men ikke ud igen. Jeg har dog ikke testet den sammen med den Session ID, og kan ikke se hvordan den skulle hjælpe. Lille forklaring..??
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.