Avatar billede dingemann Novice
01. juni 2004 - 11:10 Der 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?

// Peter
Avatar billede keysersoze Ekspert
01. juni 2004 - 11:23 #1
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
Avatar billede dingemann Novice
01. juni 2004 - 11:46 #2
det var også min plan hvis der ikke dukkede andet op... men jeg mener det er lidt underligt at gøre det sådan...
Avatar billede keysersoze Ekspert
01. juni 2004 - 11:50 #3
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
Avatar billede mireigi Novice
01. juni 2004 - 11:57 #4
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
Avatar billede dingemann Novice
01. juni 2004 - 12:45 #5
nu er det ikke en session det handler om men princippet er der (det handler om skrivning af data til en fil når brugeren 'skifter retning'

Men udførers ASP'en ikke før Javaen ? - i såfald kan det her lade sig gøre:

<%
function logout()
    bla bla bla
end function
%>
<body onunload="Luk()">

<script language="javascript">

    function Luk()
        {
        <%
call logout()
        %>
        }

</script>

// Peter
Avatar billede mireigi Novice
01. juni 2004 - 12:53 #6
Jo det burde du kunne, men du skal huske at ha' alle dine scripts før <body>-tagget, ellers kan HTML-fortolkeren ikke finde scriptet...

/MiReiGi
Avatar billede keysersoze Ekspert
01. juni 2004 - 12:53 #7
det vil ikke kunne lade sig gøre. ASP udføres på serveren - javascript hos klienten.

På det tidspunkt du kalder javascript-funktionen Luk() eksisterer ASP-funktionen logout() slet ikke
Avatar billede mireigi Novice
01. juni 2004 - 12:55 #8
keysersoze -> Der ta'r du fejl... Det virker (ihvertfald det første jeg foreslog) opåklageligt for mig...

/MiReiGi
Avatar billede keysersoze Ekspert
01. juni 2004 - 13:04 #9
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.
Avatar billede mireigi Novice
01. juni 2004 - 13:08 #10
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?

/MiReiGi
Avatar billede keysersoze Ekspert
01. juni 2004 - 13:11 #11
jeg HAR forklaret det - ASP fortolkes af serveren og JS på klienten. Derfor vil det være nok at lave denne ene side i din frame;

logout.asp
------------------------
<%
Session("login") = 0
%>
------------------------

Der behøver hverken at være body, javascriptfunktioner eller noget som helst andet.

Desuden - hvis det er en logout-funktion er det betydelig mere hensigtsmæssigt at bruge

session.abandon
Avatar billede mireigi Novice
01. juni 2004 - 13:20 #12
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...

Altså virker mit uopklageligt...

/MiReiGi
Avatar billede keysersoze Ekspert
01. juni 2004 - 13:26 #13
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.
Avatar billede mireigi Novice
01. juni 2004 - 13:30 #14
Ok... Har bare altid haft en ide om at når en session var sat så forblev den som den er indtil ændret...

Takker for at opklare det mysterium for mig...

Så løsningen for "dingemann" er sådan set bare følgende:

<-- Script start -->

<-- Script slut -->

Altså ingenting... Eller hva???

/MiReiGi
Avatar billede keysersoze Ekspert
01. juni 2004 - 13:31 #15
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
Avatar billede dingemann Novice
01. juni 2004 - 14:03 #16
dvs at der er en forklaring med en løsning (keysersoze) og der er en udokumenteret løsning (mireigi) ?


// Peter
Avatar billede mireigi Novice
01. juni 2004 - 14:05 #17
Det er nok sådan noget lign. ja...

/MiReiGi
Avatar billede dingemann Novice
01. juni 2004 - 14:10 #18
*suk*

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å?
Avatar billede mireigi Novice
01. juni 2004 - 14:19 #19
<body onunload="window.open('Logud.asp','Logud_Vindue','height=1,width=1')">

<-- "Logud.asp" -->

<body onload="this.moveTo(1,1)">
<%
//Dit logud script//
%>
</body>

<-- -->

/MiReiGi
Avatar billede mireigi Novice
01. juni 2004 - 14:20 #20
ups...

<body onunload="window.open('Logud.asp', 'Logud_Vindue', 'height=1,width=1')">

Glemte lige nogle mellemrum

/MiReiGi
Avatar billede keysersoze Ekspert
01. juni 2004 - 14:22 #21
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
Avatar billede keysersoze Ekspert
01. juni 2004 - 14:31 #22
Avatar billede mireigi Novice
01. juni 2004 - 14:32 #23
Skulle da mene at min nye løsning også virker...

/MiReiGi
Avatar billede dingemann Novice
01. juni 2004 - 14:43 #24
smid et svar begge to :D i får 30 hver så :D jeg har vidst lært lige meget...

// Peter
Avatar billede mireigi Novice
01. juni 2004 - 14:44 #25
Ok... Det er hermed gjort...

/MiReiGi
Avatar billede keysersoze Ekspert
01. juni 2004 - 15:31 #26
DOH! det virker jo netop IKKE når du jo bare kalder en tom js-funktion!!! det virker fordi du ikke ved hvad du gør.
Avatar billede mireigi Novice
01. juni 2004 - 15:35 #27
keysersoze -> Angiv lige hvad du referrer til...

Det her indeholder ikke en js-funktion:

body onunload="window.open('Logud.asp','Logud_Vindue','height=1,width=1')">

<-- "Logud.asp" -->

<body onload="this.moveTo(1, 1)">
<%
//Dit logud script//
%>
</body>

<-- -->

Så hvad er dit problem??? Uddyb dig lige lidt...

/MiReiGi
Avatar billede keysersoze Ekspert
01. juni 2004 - 16:58 #28
jeg referede til dit "logud" script.

men ovenstående kan jeg da også forklare hvis det er - "onunload" er en javascript-funktion ligesom "this.moveTo" også er og ikke en html-attributter.
Avatar billede mireigi Novice
01. juni 2004 - 17:59 #29
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...

/MiReiGi
Avatar billede keysersoze Ekspert
01. juni 2004 - 18:12 #30
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
Avatar billede dingemann Novice
02. juni 2004 - 01:20 #31
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
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
Kurser inden for grundlæggende programmering

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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging