Avatar billede pcmagasinet Nybegynder
23. september 2001 - 20:39 Der er 30 kommentarer

Destroy Session

Jeg er et site, hvor brugere logger ind, hvorefter sessions bruges til at fælge brugeren rundt, med kodeord o.s.v.

Jeg har lavet det sådan, så når han klikker \"Log ud\" sletter den automatisk hans session med:

unlink(session_save_path().\'/sess_\'.$PHPSESSID);
setcookie(\'PHPSESSID\',\'\',time()-3600,\'/\');

Denne kode slette sessionen fuldstændigt.

Men sessionen er stadig aktiv hvis brugeren istedet lukker browseren eller bare skriver en ny adresse i adresselinjen. Hvordan får man så fjernet session/logget brugeren ud?
Avatar billede repsac Nybegynder
23. september 2001 - 20:46 #1
Du skulle måske lege med noget OnUnload ... Her et eks:
<frameset onUnload=\"alert(\'alert-haløj når man går væk fra en side ...\')\">
Avatar billede myplacedk Nybegynder
23. september 2001 - 21:15 #2
unlink(session_save_path().\'/sess_\'.$PHPSESSID);

Den vil jeg principielt fraråde.
PHP sletter selv de gemte data før eller siden. Du bør ikke pille ved disse data selv, og du bør designe din applikation så de evt. stadig gemte data ikke skader noget.

setcookie(\'PHPSESSID\',\'\',time()-3600,\'/\');
Det samme som ovenstående, plus at det ikke er sikkert sessionsid gemmes i en cookie. Der er andre måder.

Det du skal gøre når folk logger ud, er simpelt hen at ændre det sted i sessionen, hvor der står, at man er logget ind.

Hvis du endelig vil fjerne hele sessionen, så kig her:
http://dk.php.net/session-destroy
Husk at læse brugernes kommentarer.

/Niels Andersen
Avatar billede cyberdude Nybegynder
23. september 2001 - 21:25 #3
nu skriver du jo ikke noget om det er i en formular du har lavet denne log ud knap eller om det bare er et alm. link ?

Hvis det er et link kan du jo evt. gøre det sådant her

<a href=\"logud.php?a=logud&v=ok\">Log ud</a>

og så i filen logud.php

<?
session_start();
if ($a == \'logud\' && $v == \'ok\') {
session_destroy(brugernavn);
session_destroy(password);
session_unregister();
header(\"Location: index.php\");
}
else {
// brugeren sendes retur uden at sessionen slettes
header(\"Location: index.php\");
}
?>
Avatar billede cyberdude Nybegynder
23. september 2001 - 21:27 #4
og er det via en form du har din log ud knap i, så er det sådant her

<form action=\"logud.php\">
<input type=\"hidden\" name=\"a\" value=\"logud\">
<input type=\"hidden\" name=\"v\" value=\"ok\">
<input type=\"submit\" value=\"Log ud!\">
</form>
Avatar billede cyberdude Nybegynder
23. september 2001 - 21:29 #5
jeg har i hvertfald ikke haft problemer med at sessionen stadig var/er aktiv efter en bruger har logget ud, via ovenstående eksempler
du skal dog selv rette disse linier

session_destroy(brugernavn);
session_destroy(password);

og evt tilføje nogle flere således at du lister alle de ting du har registreret i løbet af brugerens besøg.......
Avatar billede myplacedk Nybegynder
23. september 2001 - 22:03 #6
cyberdude >> Har du prøvet at læse lidt om session_destroy i manualen? Fx linje 1 i beskrivelsen? ;-)
Ellers så er den her:
bool session_destroy (void)

\"void\" betyder, at der skal IKKE stå noget. Session_destroy sletter HELE sessionen.
Hvis du vil slette én variabel, så brug session_unregister, eller overskriv værdien. Fx. med \"false\" eller \"null\".

/Niels Andersen
Avatar billede pcmagasinet Nybegynder
23. september 2001 - 22:14 #7
Jeg tror ikke helt i har forstået mit spørgsmål.
Brugeren kan klikke på Log Out linket, ikke nogen knap!... Når de gør det, slutter den sesison og sletter alt hvad der havde med den at gøre.

Men hvad nu hvis brugeren lukker browseren ned eller båre springer videre uden at logge ud, så kører session stadig på fuld hammer...

se selv på http://www.salgsmarked.dk/dating/logind.php i blivr nød til at oprette jer :-(

Man kan i princippet lukke vinduet ned, og starte igen, 3 timer senere, og så kører sessionen stadig.

kan man så fx.  ikke lave en slags auotdelele, hvis ikke sessioen har været brugt i fx. 20 minutter?

Avatar billede pcmagasinet Nybegynder
23. september 2001 - 22:18 #8
myplacedk>> \"unlink(session bla bla)\" og \"setcookie(sesid bla bla -3600)\" er da ok at bruge, da de sletter total, hvad skulle ulemperne ved denne metoed være?
Avatar billede cyberdude Nybegynder
23. september 2001 - 22:43 #9
myplacedk -> ups... fik vist byttet om på de 2 ting.... bruger det selv en del.....

pcmargasinet ->

mener man kan lave noget....  tjækker lige...
Avatar billede cyberdude Nybegynder
23. september 2001 - 22:57 #10
du kan lave en funktion i javascript.......
og så i din
<body onUnload=\"logud()\">

<script language=javascript>
<!--- skjul script for ældre browsere

function logud(){
<?
session_unregister(brugernavn);
session_unregister(password);
session_destroy();
?>
}
// slut på kommentar der skjuler for ældre browsere -->
</script>

dette skulle / formoder jeg virker!

Har dog ikke testet, men det burde køre funktionen \"logud()\" når brugeren forlader vinduet

test det.....
Avatar billede pcmagasinet Nybegynder
23. september 2001 - 23:00 #11
kan man godt blende javascript og php sammen, som overstående eksempel gør?...

det ville hjælpe i mange situationer...
Avatar billede pcmagasinet Nybegynder
23. september 2001 - 23:03 #12
desuden, hvis jeg har fx en side der hedder inbox.php, sendmail.php, så logger den jo ud hver gang <body onunload=\"...\">

kan du se hvad jeg mener...

propper lige 210 point mere på, så kan de sætte lysten op ;o)
Avatar billede cyberdude Nybegynder
23. september 2001 - 23:34 #13
Ja man kan godt blande javascript og php på den måde.......
prøv denne her og ret den til!
det jeg har tilføjet er et tjæk på om $http_host er lige med det du definere.....

lav evt en fil der hedder phpinfo.php
som indeholder følgende
<?
phpinfo()
?>
og afvikel den så kan du et stykke nede aflæse denne variabel!
og så længe det udtryk er sandt ja så udføre den ikke koden!

<body onUnload=\"logud()\">

<script language=javascript>
<!--- skjul script for ældre browsere

function logud(){
<?
if ($HTTP_HOST == \'www.DINHOST.dk\') {
// foretag intet!
}
else {
session_unregister(brugernavn);
session_unregister(password);
session_destroy();
}
?>
}
// slut på kommentar der skjuler for ældre browsere -->
</script>

Avatar billede myplacedk Nybegynder
24. september 2001 - 04:38 #14
cyberdude >> Lige det stunt du lavede der, med en javascript-funktion der skulle udføre php-kode, kan IKKE lade sig gøre. :)
Ikke på den måde, i hvert fald.

Anyway, her er metoden som \"vi andre\" bruger:

Lad os sige, at efter 20 minutter vil du logge personen ud automatisk.

Hver gang en bruger foretager sig noget, opdateres et timestamp.
Ved at sammenligne dette timestamp med \"nu\", kan vi se idle-tiden. Hvis den er over 20 minutter kører du samme funktion som du ville have kørt, hvis brugeren selv trykkede \"logud\".

Get it? Jeg er ret træt lige nu, så mine forklaringer er måske ikke helt tydelige... :)

/Niels Andersen
Avatar billede pcmagasinet Nybegynder
24. september 2001 - 20:48 #15
meget fornemme forslag ;o)

Men er der ikke en, der kan komme med scriptet, altså et nogenlunde funktionelt script, eller noget der bare kan vise vejen med meget meget store pille...
Avatar billede pcmagasinet Nybegynder
25. september 2001 - 10:38 #16
Jeg tror dette spørgsmål er dødt!...

Er der slet ikke nogen, som kan komme med den mindste kode, så jeg kan komme videre?....
Avatar billede myplacedk Nybegynder
25. september 2001 - 10:52 #17
Er det jeg skrev, du vil have kode til?
Avatar billede myplacedk Nybegynder
25. september 2001 - 10:53 #18
Hov:
Er det det, jeg skrev, du vil have kode til?
Avatar billede pcmagasinet Nybegynder
25. september 2001 - 13:21 #19
ja tak...;o)

er helt lost
Avatar billede pcmagasinet Nybegynder
25. september 2001 - 15:38 #20
hmm.. tror bare jeg lukke spørgsmålet...

Det er altså virkelig vigtigt
Avatar billede cyberdude Nybegynder
25. september 2001 - 15:42 #21
Prøv at lukke spørgsmålet her, og oprette evt. et i javascript kategorien, for jeg mener der findes en javascript funktion som kan åbne et popup vindue hvis og kun hvis selve browser vinduet bliver lukket elelr brugeren hopper vidre til et andet domæne.......
Men jeg har ikke særlig meget forstand på javascript, så prøv at spørge der!
Avatar billede myplacedk Nybegynder
25. september 2001 - 15:49 #22
Såså, det er ikke en chat det her. :)
Folk kigger ind, når de har tid.

Det er dette, du vil have kode til, ik?
____

Lad os sige, at efter 20 minutter vil du logge personen ud automatisk.

Hver gang en bruger foretager sig noget, opdateres et timestamp.
Ved at sammenligne dette timestamp med \"nu\", kan vi se idle-tiden. Hvis den er over 20 minutter kører du samme funktion som du ville have kørt, hvis brugeren selv trykkede \"logud\".
____

Prøv at gå i gang med at skrive det selv, så kan du jo spørge hvis du går i stå.

Jeg vil altså ikke lave det hele for dig, kun hjælpe dig med at lave det selv.
Hvis det er meget vigtigt kan du overveje at betale mig for at gøre det. Det er det, jeg lever af.

/Niels Andersen
Avatar billede all-technology Nybegynder
25. september 2001 - 18:39 #23
I din php.ini file
kan du saette session.gc_maxlifetime

session.gc_maxlifetime specifies the number of seconds after which data will be seen as \'garbage\' and cleaned up.

Det lyder som det du har brug for.
Knud
Avatar billede myplacedk Nybegynder
25. september 2001 - 20:01 #24
all-technology >> Husk at det er en MINIMUM-tid.
Efter den tid bliver sessionsdata godt nok markeret som \"garbage\", men den er stadig tilgængelig.
Garbage bliver slettet i ny og næ, men på fx. en meget lidt brugt hjemmeserver kan det godt ligge i fx. en uge.

Hvornår bliver garbage så slettet?
Dette er default: session.gc_probability = 1
Det betyder, at når der startes en ny session er der 1% sandsynlighed for, at der bliver foretaget garbage collection.

/Niels Andersen
Avatar billede all-technology Nybegynder
26. september 2001 - 11:45 #25
Ja, det er rigtig saa hvis man har
session.gc_probability = 100
er man sikker paa at den bliver fjernet
ved den første nye session efter
session.gc_maxlifetime

Knud
Avatar billede myplacedk Nybegynder
26. september 2001 - 11:59 #26
all-technology >> Hvilket vel ikke er til den helt store gavn, hvis man ikke har nye besøgende hvert minut? Eller hvor lang tid fyren nu kan vente ud over de 20 minutter...

/Niels
Avatar billede cyberdude Nybegynder
26. september 2001 - 22:33 #27
tror jeg har fundet løsningen!!


<script language=\"Javascript\">

<!-- //
flag = 1;
function LogUd() {
if (flag==1) {
        open(\"http://DIT_SITE.dk/FIL.php\", \"PopUp\", \"toolbar=yes,menubar=yes,status=no,directories=no,location=no,scrollbars=yes,resizable=yes,width=640,height=310,left=30,top=30,screenX=30,screenY=30\"); 
        }
}
// -->

</script>

dette her -> http://DIT_SITE.dk/FIL.php
erstattes med den fil du vil åbne og som så skal logge brugeren ud
eks. http://eksperten.dk/logud.php?bruger=$bruger

indsæt de variabler der skal bruges for at logge den rigtige bruger ud!


og så på ALLE de link der bruges på dit site skal angives sådant her
<a href=\"dinfil.php\" onClick=\"flag=0\">link</a>

så virker det!!

dvs. at har du link på dit site som linker VÆK fra dit site så skal det selvf. bare være et alm link uden den der onClik ting, og når brovseren lukkes/ der skrives en anden adresse i adresse feltet vil funktionen være sandt og din logud procedure afvikles!!

spørg gerne, hvis du er i tvivl!
Avatar billede cyberdude Nybegynder
26. september 2001 - 22:34 #28
og så skal du selvføldig have en

<body onUnload=\"LogUd()\">

og ovenstående script skal placeres ovenover din <body.......>


Avatar billede cyberdude Nybegynder
03. oktober 2001 - 17:31 #29
halooooooo........ :-))
Avatar billede tamen Nybegynder
26. maj 2002 - 13:30 #30
Jeg har leget lidt med sessions og har fundet ud af at den følgende kode virker fint til mig:

session_start();
if (isset($_GET['logout'])){
    session_unset();
    session_destroy();
}

Hvis du skriver et link: <a href="enside.php?logout=yes">Log ud</a>
Og brugerne klikker på det virker sessionen ikke mere. Jeg er ikke sikker på om
sessiondataene direkte bliver slettet eller hvad. Men i min kode bliver de ihvertfald logget ud.
Jeg lægger lige hele min kode med:

<?php
session_start();
if (isset($_GET['logout'])){
    session_unset();
    session_destroy();
}
// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if ((!isset($_SESSION['loggedin'])) && (!isset($_POST['username']) && !isset($_POST['password']))) {
    ?><html><body>
            <form action="index.php" method="post" name="login">
            <table width="122" border="0" cellspacing="1" cellpadding="0">
                <tr>
                    <td>User:</td>
                    <td><input type="text" name="username" size="10" border="0"></td>
                </tr>
                <tr>
                    <td>Pass:</td>
                    <td><input type="password" name="password" size="10" border="0"></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" name="submitButtonName" value="login" border="0"></td>
                </tr>
            </table>
        </form></html></body>
        <?php
} else {
    $_SESSION['loggedin'] = "yes";
    $_SESSION['username'] = $_POST['username'];
    $_SESSION['password'] = $_POST['password'];
    echo "Logged in as: ";
    echo $_SESSION['username'];
    echo "<br><a href=\"index.php?logout=yes\">Log out</a>";
}

?>

Håber du kan bruge det :)
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