Avatar billede mccookie Seniormester
19. februar 2006 - 21:39 Der er 43 kommentarer og
1 løsning

Open new window

Hejsa

Kan man og hvordan kan man?

Jeg er igang med at lave noget login system til min hjemmeside....

Min tanke er følgende....

Jeg har et hovedvindue som konstaterer at min bruger ikke er logget ind....

Der kommer et link til et login script (login.php)

Den skal åbne et nyt vindue som brugeren kan indtastes brugeroplysninger mv.

Når brugeren trykker submit......

så skal den lukke det nye window og hoppe tilbage i forrige window og forsætte til et script der kontrollere om oplysningerne er ok! (kontrol.php)

Er der nogen der kan hjælpe mig?
Avatar billede thesurfer Nybegynder
20. februar 2006 - 00:46 #1
Det er da bedre, at popupvinduet kontrollerer om login er ok.. Hvis det er det, lukker den vinduet og fortsætter i hovedvinduet..

/theSurfer
Avatar billede thesurfer Nybegynder
20. februar 2006 - 01:09 #2
Jeg har lavet et lille ikke-fungerenede eksempel, som du kan se nederest i dette indlæg :-)

Grunden til at det er ikke-fungerende er, at jeg ikke kan nok PHP til at lave opslaget/checket.. og at jeg ikke ved hvad du har tilrådehed af database osv..
..og så gider jeg vist ikke at lave det.. :-)

Så skal du bare bruge PHP kode.. den kan du få hjælp til, i PHP kategorien..

http://www.eksperten.dk/spm/Programmering/Script/PHP/


- Jeg tillader mig at smide et svar..


Hovedvinduet:

<a href="#" onclick="window.open('login.php','login','');return false">Log ind</a>

Loginvinduet:

<?php

// denne variabel bruger vi til at indeholde om brugeren har forsøgt login:
$forsoegt_logind = false;

// først skal man checke om der er forsøgt at logge ind:

if (...) {
// der er forsøgt at logge ind.. forsæt med denne kode..
$forsoegt_logind = true; // sæt en variabel til true

    // check om bruger navn og kode er korrekt.. f.eks. med opslag mod en database

    if (.....) {
    // brugernavn OG kodeord var korrekt, udfør denne kode:
?>

<script type="text/JavaScript" language="JavaScript">
// skift hovedsiden til en side der fortæller brugeren, at han/hun er logget ind:
parent.window.location.href = "login_ok.htm";

// luk popup-vinduet
window.close();
</script>

<?php
    exit; // "exit" skulle gerne stoppe med at sende data til browseren
    } // slut: check om brugernavn og kodeord er korrekt
} // slut: om man har forsøgt login

?>
<form name="frmLogin" action="login.php" method="post">
Brugernavn: <input type="text" name="brugernavn">
<br>
Kodeord: <input type="password" name="kodeord">
<br>
<input type="submit" name="loginsubmit" value="Log in">

<?php
if ($forsoegt_logind) {
// brugeren har forsøgt på at logge ind,
// men med forkert brugernavn eller kodeord..
// Skriv en meddelelse til brugeren:
?>
Brugernavn eller kodeord er forkert!
<?php
}
?>

/theSurfer
Avatar billede mccookie Seniormester
20. februar 2006 - 01:17 #3
thesurfer>>

Tricket er at gerne vil have brugeren taster username/password i et popup window som efterfølgende lukkes

Når brugeren er godkendt bliver der sat nogle sessions værdier og forsvinder jo når jeg så lukker popup window.....
Derfor skal der indtastes username+password i et popup og denne lukkes og data sendes til hovedvindue.....

Derved skulle vi gerne slippe af med at brugere der ikke lukker deres browser efterfølgende har ladet en dør stå åben.....
Avatar billede thesurfer Nybegynder
20. februar 2006 - 01:22 #4
Ahhh.. OK, så er jeg med..

Laver lige et nyt eksempel..

/theSurfer
Avatar billede thesurfer Nybegynder
20. februar 2006 - 01:34 #5
Hmm.. nogen speciel grund til at du bruger en popup, i stedet for at bruge login + kontrol i samme side..?

Det er normalt sådan at man gør det..

/theSurfer
Avatar billede mccookie Seniormester
20. februar 2006 - 16:18 #6
Hejsa

Ja, det er der, derved kan jeg undgå at andre kan bruge en computer efter logud og blot ttrykke tilbage.....Netop fordi data sendes fra popup som lukkes efter login...

Derfor den lidt vanskelige udgave,..........
Avatar billede mccookie Seniormester
20. februar 2006 - 16:19 #7
Afviser lige mit eget svar.....
Avatar billede thesurfer Nybegynder
20. februar 2006 - 20:18 #8
Ahh..
Men du kan jo bare bruge "no cache"-kode..

HTML:
  http://www.codeave.com/html/code.asp?u_log=5080
  http://www.i18nguy.com/markup/metatags.html

PHP:
  http://dk2.php.net/header
  http://lab.artlung.com/anti-cache/

På den måde caches siden ikke, og browseren vil derfor loade en frisk version af siden, hvor du har dit session-check..

Jeg mener stadigvæk at det er den rigtige måde (login+kontrol = 1 side)..

/theSurfer
Avatar billede mccookie Seniormester
20. februar 2006 - 21:53 #9
Hvorfor gå over åen efter vand?

Tak for indsatsen og hjælpen ;)
Avatar billede thesurfer Nybegynder
20. februar 2006 - 21:57 #10
Det var så lidt.. :-)

Jeg håber at "login+kontrol = 1 side" giver mening.. ellers må du lige sige til..

Så kan jeg muligvis lave et eksempel.. Det kan de i hvert fald i PHP kategorien :-)

/theSurfer
Avatar billede mccookie Seniormester
20. februar 2006 - 22:18 #11
Det er altså mystikst den gemmer det alligevel.....

Ptrøver lige igen
Avatar billede mccookie Seniormester
20. februar 2006 - 22:26 #12
Har prøvet alle dem her:

echo "<meta http-equiv=\"Cache-Control\" content=\"no-cache\">";
    echo "<meta http-equiv=\"Cache-Control\" content=\"no-store\">";
    echo "<meta http-equiv=\"Pragma\" content=\"no-cache\">";
Avatar billede thesurfer Nybegynder
20. februar 2006 - 22:35 #13
Brug både HTML og PHP versionerne samtidigt.. det burde sikre det ønskede resultat..

/theSurfer
Avatar billede mccookie Seniormester
20. februar 2006 - 22:49 #14
Når jeg trykker på logout, så ligger de data der er sendt i logind informationerne der stadig og trykker man
Avatar billede mccookie Seniormester
20. februar 2006 - 22:49 #15
Virker i IE og ikke i firefox

prøver lige den der php udgave også.........
Avatar billede mccookie Seniormester
20. februar 2006 - 22:54 #16
header("Cache-Control: no-cache, must-revalidate");

Den her dræber ALT i IE - perfekt......
Prøver lige FF
Avatar billede mccookie Seniormester
20. februar 2006 - 22:55 #17
Firefox virker det næsten.....
Man kan trykke tilbage og se sidst hentede side og derefter kræver den login.....

Det er næsten perfekt
Avatar billede thesurfer Nybegynder
20. februar 2006 - 23:01 #18
Hmm.. underligt.. den burde overhovedet ikke cache siden..

/theSurfer
Avatar billede mccookie Seniormester
20. februar 2006 - 23:03 #19
Trykker 2x jeg tilbage i IE, så kan jeg trykke F5 og får lov til at sende data igen....
Avatar billede mccookie Seniormester
20. februar 2006 - 23:06 #20
Men den driler os.............
Avatar billede mccookie Seniormester
20. februar 2006 - 23:07 #21
Sådan her ser et dokument ud:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Cache-Control" content="no-store">
<meta http-equiv="Pragma" content="no-cache">
<title>Untitled Document</title>
</head>

<table width="100%" border="1">
<tr>
  <td colspan="14" align="middle">Test af password protection</td>

</tr>

<tr>
  <td width="7%" align="middle">Fil</td><td width="7%" align="middle">Auth_type</td>
  <td width="7%" align="middle">Fil</td><td width="7%" align="middle">Auth_type</td>
  <td width="7%" align="middle">Fil</td><td width="7%" align="middle">Auth_type</td>
  <td width="7%" align="middle">Fil</td><td width="7%" align="middle">Auth_type</td>

  <td width="7%" align="middle">Fil</td><td width="7%" align="middle">Auth_type</td>
  <td width="7%" align="middle">Fil</td><td width="7%" align="middle">Auth_type</td>
</tr>

<tr>
  <td width="7%" align="middle"><a href="fil1.php">1</a></td><td width="7%" align="middle">0</td>
  <td width="7%" align="middle"><a href="fil2.php">2</a></td><td width="7%" align="middle">1</td>

  <td width="7%" align="middle"><a href="fil3.php">3</a></td><td width="7%" align="middle">2</td>
  <td width="7%" align="middle"><a href="fil4.php">4</a></td><td width="7%" align="middle">3</td>
  <td width="7%" align="middle"><a href="fil5.php">5</a></td><td width="7%" align="middle">3</td>
  <td width="7%" align="middle"><a href="fil6.php">6</a></td><td width="7%" align="middle">2</td><td width="16%"><a href="/auth_php/lib/login.php?action=logout">Logout</a></td>

</tr>
<tr>
  <td colspan="14">Her er vi: /auth_php/fil2.php</td>
</tr>
</table>Her er læseadgang</body>
</html>
Avatar billede thesurfer Nybegynder
20. februar 2006 - 23:08 #22
Hvis du trykker F5 på den side hvor du loggede ind, skulle den gerne sende login-oplysningerne igen.. Det er normalt, og virker også sådan i Opera.

Hvis det ikke skulle være muligt, skal man lukke vinduet..
Det kan du f.eks gøre ved logout, med denne kode:

<script type="text/JavaScript" language="JavaScript">
window.close();
</script>

Du kan også vælge at bruge top.window.close(), hvis du bruger (i)frames..

/theSurfer
Avatar billede thesurfer Nybegynder
20. februar 2006 - 23:09 #23
Du burde lave et session-check i toppen af dine sikrede sider..
Og i "login.php?action=logout"-sektionen overskriver du sessionen med f.eks. "".. eller bruger en eller anden form for "abandon" (slet sessionen)..

/theSurfer
Avatar billede mccookie Seniormester
20. februar 2006 - 23:11 #24
Men jeg kunne vel bare sætte den session som checker om brugeren er logget ind til noget vandvittigt.....
Avatar billede thesurfer Nybegynder
20. februar 2006 - 23:15 #25
Den skal bare ikke være det "rigtige", som betyder at brugeren er logget ind.. :-)
..frit valg på alle hylder..

/theSurfer
Avatar billede mccookie Seniormester
20. februar 2006 - 23:26 #26
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Cache-Control" content="no-store">
<meta http-equiv="Pragma" content="no-cache">
<title>Untitled Document</title>
</head>
<br />Du besøgt denne side: <br />Du er nu logget ud10</body>
</html>
Avatar billede mccookie Seniormester
20. februar 2006 - 23:28 #27
Det er oprindelig derfor jeg ville have brugeroplysninger i et separat vindue som lukkes når brugeren er logget ind, hvorfor de tåbelige postdata er væk......

Man kan hele tiden gå tilbage og opdatere

Den overruler også selvom jeg sætter min login_status til 10 istedet for 1 og beder den ragere på 10 - Men den er ligeglad
Avatar billede thesurfer Nybegynder
20. februar 2006 - 23:46 #28
Jeg ser om jeg kan finde en løsning i morgen.. sengetid..

/theSurfer
Avatar billede mccookie Seniormester
20. februar 2006 - 23:50 #29
<html>
  <head>
  <meta http-equiv="Pragma" content="no-cache">
  <meta http-equiv="Cache-Control" content="no-store">
  <meta http-equiv="Expires" content="0">
  <meta http-equiv="Refresh" content="3;url=http://www.satirepartiet.dk/auth_php/index.php" />
  <title>Logud</title>
  </head>
<body>
<?php
      echo $_SESSION['auth_name'] . " " . $_SESSION['auth_lastname'] . "<br />";
      echo "Du besøgt denne side: " . $_SESSION['auth_path'] . "<br />";
      echo "Du er nu logget ud";
      session_destroy();
?>
</body>
</html>


men igen den kan blot opdateres og så er skaden jo sket :)

Glæder mig til at se dit forslag............
Avatar billede mccookie Seniormester
21. februar 2006 - 00:00 #30
Avatar billede thesurfer Nybegynder
21. februar 2006 - 00:03 #31
Ja, jeg har kigget på noget ligende..

Problemet er, at vinduet hvorfra popupen åbnes, ikke har noget navn..

Der er dog en henvisning til vinduet der hedder "opener".

Jeg kunne godt hente navnet på main-vinduet, der åbnede popupen med opener.window.title.. men jeg kunne ikke få lov til at submitte formen (fra popupen) til opener.. den åbnede bare et nyt vindue..

Dette er testet med IE og Opera.

/theSurfer
Avatar billede mccookie Seniormester
21. februar 2006 - 00:21 #32
Fandt endnu en....kan bare ikke lige se hvordan den fungerer

http://www.irt.org/script/216.htm
Avatar billede thesurfer Nybegynder
21. februar 2006 - 00:30 #33
Ahhh... så er jeg med..
Jeg burde egentligt have fundet på denne løsning.. men tænkte mig ikke rigtigt om..

Hovedvinduet har jo ikke noget navn, så man kan normalt ikke bruge TARGET i FORM tag'et.

I eksemplet, giver man hovedvinduet navnet "mywindowname", og man kan derfor bruge TARGET="mywindowname".

Det burde løse problemet.. Jeg tester det lige..

/theSurfer
Avatar billede thesurfer Nybegynder
21. februar 2006 - 00:34 #34
Så virker det:

Hovedvinduet (main.htm):

<html>
<head>
<title>the main page</title>
<script type="text/JavaScript">
window.name="hovedvinduet";
</script>
</head>
<body>
<a href="#" onclick="window.open('login.htm','login','');return false">Log ind</a>
</body>
</html>


Popup (login.htm):

<form name="frmLogin" action="kontrol.htm" method="post" target="hovedvinduet" onsubmit="window.close()">
Brugernavn: <input type="text" name="brugernavn">
<br>
Kodeord: <input type="password" name="kodeord">
<br>
<input type="submit" name="loginsubmit" value="Log in">

/theSurfer
Avatar billede thesurfer Nybegynder
21. februar 2006 - 00:35 #35
..filerne hedder ".htm", da jeg pt. ikke kan teste PHP filer..

/theSurfer
Avatar billede thesurfer Nybegynder
21. februar 2006 - 00:36 #36
Jeg testede lige i Opera..

Det virker ikke, da vinduet lukkes inden formes submittes..

Men det virker fint, hvis man indsætter en timeout på 1 ms (1/100 sek):

<form name="frmLogin" action="kontrol.htm" method="post" target="hovedvinduet" onsubmit="setTimeout('window.close()',1)">
Brugernavn: <input type="text" name="brugernavn">
<br>
Kodeord: <input type="password" name="kodeord">
<br>
<input type="submit" name="loginsubmit" value="Log in">

/theSurfer
Avatar billede thesurfer Nybegynder
21. februar 2006 - 00:38 #37
Koden fra 21/02-2006 00:36:59 virker i IE, FireFox og Opera.

/theSurfer
Avatar billede mccookie Seniormester
21. februar 2006 - 16:52 #38
Det virker som tænkt.....

Men hvor bliver data af?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>the main page</title>
<script type="text/JavaScript">
window.name="hovedvinduet";
</script>
</head>
<body>
<?php
$brugernavn = $_REQUEST['brugernavn'];
echo $brugernavn;
echo "HEJSA";
if(isset($_REQUEST['checksum'])) { echo "Velkommen: " . $_REQUEST['brugernavn']; }
?>
<a href="#" onclick="window.open('login.php','login','');return false">Log ind</a>
</body>
</html>




<form name="frmLogin" action="index.php" method="post" target="hovedvinduet" onsubmit="setTimeout('window.close()',10)">
Brugernavn: <input type="text" name="brugernavn">
<br>
Kodeord: <input type="password" name="kodeord">
<br>
Checksum: <input type="checksum" value="checksum" readonly>
<input type="submit" name="loginsubmit" value="Log in">
</form>


Har rettet dem til php, dog er der ingen data i variablerne....
Avatar billede mccookie Seniormester
21. februar 2006 - 17:01 #39
Hvis man fjerner det der settimeout, så virker det dog med følgende bemærkning....

Den åbner et 3. vindue og springer ikke tilbage i mainvinduet.....
Det er gældende for firefox
Avatar billede mccookie Seniormester
21. februar 2006 - 17:03 #40
IE 7.0

Der virker det.....

www.satirepartiet.dk/login
Avatar billede mccookie Seniormester
21. februar 2006 - 17:04 #41
Firefox den kan ikke rigtig det der med javascript eller hvad? Det må kunne lade sig gøre!

Vi er tæt på
Avatar billede mccookie Seniormester
21. februar 2006 - 17:07 #42
Heller ikke om settimeout er på 1000ms
Avatar billede mccookie Seniormester
21. februar 2006 - 19:32 #43
Jeg opretter et nyt spm ;) og håber at du deltager der istedet ;)
Denne tråd er blevet temmelig lang.....

Mvh.
Henning
Avatar billede mccookie Seniormester
21. februar 2006 - 19:36 #44
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