01. juni 2004 - 11:10Der er
28 kommentarer og 3 løsninger
ASP ved luk af side
med <body onClose= er det muligt at lave det sådan at et script bliver kørt - men det er på nogen måde muligt at lave det sådan at det er en ASP-funktion der bliver kørt når brugeren enten lukker siden, browser væk eller på anden måde forlader web-stedet?
kald en javascript-funktion i din onclose der åbner et nyt vindue. I det nye vindue kalder du bare din ASP-funktion og lukker vinduet igen med javascript når det er udført
Du kan ikke umiddelbart kalde en asp-funktion fra klienten - derfor ligner det den eneste mulighed.
En sidste ting der kan kigges på er remote scripting - hvordan og hvorledes kan du læse mere om her http://www.eksperten.dk/spm/495287, men det ved jeg ikke om kan komme til at fungere som dit ønske
Du bør ikke bruge "window.open"-funktioner når du skal ha' logget brugere af når forlader dit website. Mange bruger Pop-up blokkere, og de (kan) forhindre dit script i at blive kørt.
indsæt nedenstående kode i din banner-sektion (virker bedst med ramme-inddeling) istedetfor, det virker upåklageligt for mig:
<script language="javascript">
function Luk() { <% Session("login") = 0 %> }
</script>
<body onunload="Luk()">
------------------------------------- Session("login") = 0 <--- Ændrer du bare til den Session du anvender ved login.
mireigi >> ja - nej... Det er fordi du blander ting sammen.
Dit script er med henblik på at det kaldes i en frame - og kører siden ikke med frames er der jo ingen frame at kaldes og derfor ingen side at køre scriptet i. samtidig er det ikke sikker man kan nå at kalde en frame hvis brugere klikker på krydset i browseren.
Dernæst så vil det script kunne forkortes til bare
Session("login") = 0
fordi; js og asp kører hver sit sted - session'en sættes til 0 på serveren samt generer js/html outputtet til serveren. Når outputtet så kommer til browseren forsøger body at kalde funktion Luk() - men på det tidspunkt er din funktion Luk() tom og der kalder reelt en tom javascript-funktion... det burde du kunne se hvis du siger vis kilde. Hvorfor? jo fordi ASP'en bliver behandlen på serveren og javascripten hos klienten.
Reelt set kunne du lige så godt skrive ;
---------------- <% Session("login") = 0 %>
<script language="javascript">
function Luk(){ }
</script>
<body onunload="Luk()"> --------------------
og det ville give præcis det samme resultat.
Så før du udtaler dig for hurtigt burde du sætte dig lidt grundigere ind i klient/server teknologier.
Hvis bare det virker, så jeg er lidt ligeglad med hvorfor... Når det ikke virker spørger jeg hvorfor det ikke virker...
Mit script virker fint nok for mig, så forklar mig lige hvordan det hænger sammen iht. din forklaring om klient/server... Eller har jeg overset noget i det du skrev?
Hmmm... Har set på et andet sted her på eksperten.dk at der var problemer med at have flere brugere logget ind på én gang når man anvendte "session.abandon"... Noget med at "samtlige" brugere blev logget af... Derfor bruger jeg den ikke...
Og desuden... Hvis du bare har følgende i fx Banner.asp: <% Session("login") = 0 %>
Så sættes den jo kun når siden loades, men det skal den ikke... Den skal jo sættes når siden lukkes ned...
For at bevise at scriptet virker som jeg har lavet det, så gå herind og vælg "Din profil --> Log ind" i menuen til venstre: www.rathan.dk/it_projekt/produktet
Bruger: Test Password: Test
Luk derefter browservinduet ned, og gå derind igen, og vælg "Din profil --> Se profil"... Nu er sessionen resettet, og du kan ikke se profilens indhold før du logger dig ind igen...
sessions er unikke for hver enkelt bruger - så at bruge session.abandon vil ikke smide samtlige brugere af.
Hvis jeg lukker browserevinduet ned er det klart at session'en forsvinder - ikke pga dit script, men ganske enkelt fordi session'en hører til browservinduet så selvom du ikke laver en session.abandon eller andet vil brugerens session automatisk forsvinde.
jeg ved ikke hvordan jeg ellers skal forklare det - det kan godt være det virker, men det virker ikke med de begrundelser du siger. Det virker fordi du ikke kender arbejdet mellem klient/server.
Hvis du siger vis -> kilder i Banner.asp så ser js-koden således ud;
<script language="javascript">
function Luk() {
}
</script>
Ergo kalder du en tom js-funktion, og en tom js-funktion udfører ingenting - heller ikke asp-ting
jeg hælder mest til den udokumenterede da jeg slipper for vinduet i popuppen men jeg er også lidt bange for at den ikke når og køre funktionen før unloaden har fundet sted... uuuhm...
Ikke for at være besværlig men hvordan ville den anden se ud - den med javapopuppen hvis vinduet skulle placeres et sted hvor brugeren ikke så?
der er ikke noget udokumenteret og noget forklaret - jeg vil hellere sige der er noget rigtigt og noget forkert. mireigi's løsning virker fordi en session automatisk "forsvinder" når et vindue lukkes - og han kunne lige så godt bare nøjes med at skrives session.abandon og helt undlade js-funktionen. Sættes det helt på spidsen vil det ikke engang have noget effekt da session'en nulstilles idet siden kaldes og ikke ved onunload da funktionen jo er tom når den forsøges kaldt.
vil du have kaldt noget ASP bliver du nødt til at kalde et popup-vindue - ligesom både onunload og onclose skal bruges.
Samtidig slipper du ikke for - hvis det er meget vigtigt at den funktion køres - også at tilføje det i din global.asa fil
Ok... Har lige testet mit script... onunload virker åbenbart ikke længere i IE6.0... Førhen kunne man lave en uendelig løkke med onunload="" så man ikke kunne lukke et vindue... Det kan man åbenbart ikke længere...
Jeg forlader det her emne, men vil holde øje med en løsning på problemet... Og hvad med at smide et script selv... Du ved... Konstruktiv kritik...
det har jeg gjort... vil man kalde en asp-funktion ved onload, onclose eller på anden måde uden reload af siden bliver man nødt til at kalde et popup-vindue.
Remote Scripting som omtalt 01/06-2004 11:50:31 vil højst sandsynligt ikke kunne bruges i dette tilfælde.
Er det knap så vigtigt hvornår funktion køres kan man lade funktion køre ved session_onend i global.asa
et eller andet sted kan jeg kun bruge keysersozes svar (fed film iøvrigt - så den lige igen efter at ha set dit navn), meeen jeg lærte lidt :D sååeh derfor - og 30 point fra eller til...
tak for debatten iøvrigt :D
// Peter
Synes godt om
Ny brugerNybegynder
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.