Avatar billede davidskp Nybegynder
17. oktober 2002 - 11:33 Der er 17 kommentarer og
1 løsning

login m. cookie

Jeg har et simpelt login script der virker på den måde at man har $user = "brugernavn"; og $pass = "password";

Så skriver man "brugernavn" og "password" i en form og så tjecker scriptet om det man har skrevet passer overens med $user og $pass...meget enkelt

Mit problem er så, at jeg gerne vil placere en cookie når der logges ind så jeg kan tjecke efter cookien på andre sider og dermed se om brugeren er logget ind...
Men cookien skal jo placeres helt i toppen af dokumentet, og det er jo først længere nede at der tjeckes om brugernavn/password passer...og cookien skal jo kun lægges hvis dette er tilfældet...

hmmm er det til at forstå eller giver det ingen mening...? :-)
Avatar billede achrist Nybegynder
17. oktober 2002 - 12:20 #1
Du kan bruge sessions til at gemme oplysningen om login (de sker iøvrigt pr. default netop via cookies). Først lav et login-script som dette:
------------------
<?php
$brugernavn = "test";
$adgangskode = "test";

global $loginfejl;
global $loginOK;
session_start();
#Check om login-billedet allerede har været sendt

if (isset($HTTP_POST_VARS['user']) && isset($HTTP_POST_VARS['pass'])){
# Er brugernavn og adgangskode korrekt?
    if ($brugernavn == $HTTP_POST_VARS['user'] && $adgangskode == $HTTP_POST_VARS['pass']) {
        # Gem info om at login er OK som sessionsvariabel
        $LoginOK=1;
        session_register(LoginOK);
        # Send brugeren til det ønskede sted
          header("Location: http://admin.php");
          exit;
    }
    else
        # Ellers husk at der er lavet et forvæges login-forsøg
        $loginfejl=1;
}   
# Ved forgæves forsøg: Fortæl brugeren, hvad der er galt
if ($loginfejl):?>
  <H3><br>Ugyldigt brugernavn eller kodeord<br></H3>
<? endif;?>
<?
# Send loginbilledet
echo("<FORM action=\"login.php.php\" method=POST name=login.php>");
echo("<TABLE align=center>\n");
echo("<TH colspan=3 align=center>\n");
echo("Indtast brugernavn og kodeord\n");
echo("</TH>\n");
echo("<TR>\n");
if (isset($HTTP_POST_VARS['user']))
    $user=$HTTP_POST_VARS['user'];
else
    $user="";
echo("<TD>Brugernavn: </TD>\n");
echo("<TD><INPUT type=text size=10 name=user value=\"$user\"></TD>\n");
echo("</TR>\n");
echo("<TR>\n");
echo("<TD>Kodeord: </TD>\n");
echo("<TD><INPUT type=password size=10 name=pass></TD>\n");
echo("</TR>\n");
echo("<TR>\n");
echo("<TD colspan=1 align=right><INPUT type=submit value=\"Log på\"></TD>\n");
echo("</TR>\n");
echo("</TABLE>\n");
echo("</FORM>\n");

?>

--------------------
I alle andre scripts end login.php skal du nu starte med at checke, om brugeren er logget korrekt ind:
<?
session_start();
if(empty($LoginOK)) {
      # Forsøg på at starte admin.php uden om login?
      # Så tilintetgør et evt. eksisterende login
      session_destroy();
      # Og send brugeren til login-scriptet
      header("Location: login.php");
      exit;
  }
#Nu ved du at brugeren er logget ind
?>

-------------------

M.v.h.
Allan
Avatar billede hagbardph3 Nybegynder
17. oktober 2002 - 17:11 #2
Jeg vil nok sige det er lidt overkill at bruge session til et simpelt login system. Et simplet login scrip der sætter en cookie kan hurtigt laves meget simplere.
Avatar billede davidskp Nybegynder
17. oktober 2002 - 21:02 #3
men hagbardph3, hvordan sætter jeg så cookien, kun når der er logget ind?
Avatar billede hagbardph3 Nybegynder
17. oktober 2002 - 21:18 #4
Jo men du tjekker først om der er en cookie i forvejen.. så tjekker du om user/pass word er sat.. Derefter tjekker du om de passer og så sætter du cookien... I den følgende kode skal du sådan set bare selv lave din tjekuser function. og så er du oppe at køre.

if(!$HTTP_COOKIE_VARS[cookienavn] && isset($user) && isset($pass))
{
    if(tjekuser($username, $password))
    {
        setcookie("cookienavn", $user, time()+1209600);
        header ("Location: index.php");
    }
}
function tjekuser($user, $pass)
{
  //hvis user/pass er valid
  if($user = "mitusername" && $pass="kodeordet")
  return true;
  else
  return false;
}
Avatar billede hagbardph3 Nybegynder
17. oktober 2002 - 21:29 #5
ups..  if($user == "mitusername" && $pass == "kodeordet")
Avatar billede davidskp Nybegynder
17. oktober 2002 - 22:04 #6
Jeg prøvede med noget enkelt...men det virker ikke...

if($brugernavn == $user && $password == $pw) setcookie("login","1",time()+3600);

Men så sætter den cookien ligemeget hvad - hvorfor gør den det?
Avatar billede hagbardph3 Nybegynder
17. oktober 2002 - 22:28 #7
Tror du sammenligner de forkerte ting.

hvis du siger:

if($brugernavn == "myname" && $password == "mypass")
setcookie("login","1",time()+3600);

Sætter kun cookien i det øjeblik at
$brugernavn = myname 
$password = mypass
(altså nyname og mypass skal indtastes i din form)
Avatar billede davidskp Nybegynder
17. oktober 2002 - 22:47 #8
Jamen det er jo netop dette øjeblik cookien skal sættes...når man skriver sit brugernavn/password og kører scriptet...

Men hvorfor virker ovenstående linie ikke? Som sagt sætter den cookien bare man åbner login.php...
Avatar billede hagbardph3 Nybegynder
17. oktober 2002 - 22:57 #9
okay... og du har husket at slette din cookie hver gang du prøver scriptet?
Avatar billede davidskp Nybegynder
17. oktober 2002 - 23:04 #10
ja jeg har en time()-9999 cookie jeg kører
Avatar billede davidskp Nybegynder
17. oktober 2002 - 23:05 #11
og så har jeg sat expire til 20 sec....
Avatar billede hagbardph3 Nybegynder
17. oktober 2002 - 23:20 #12
ok.. kan man få lov til at se hele login.php scriptet???
Avatar billede davidskp Nybegynder
17. oktober 2002 - 23:26 #13
<?
if($brugernavn == $user1 && $password == $pw1) setcookie("login","1",time()+3600);
include("head.inc");

if($logincookie == "1") echo "<center>Du er allerede logget ind</center>";

else {

$user1 = "bruger"; $pw1 = "password";

if($action == "login"){

if(!$brugernavn) echo "<center><font class='red'>Du har ikke indtastet et brugernavn</font><br><br><a href='java script:history.back()'>Tilbage</a></center>";
elseif(!$password) echo "<center><font class='red'>Du har ikke indtastet et password</font><br><br><a href='java script:history.back()'>Tilbage</a></center>";

else{
if($brugernavn == $user1 && $password == $pw1)
{
?>
<center><font class='green'>Du er nu logget ind</font></center>
<?
}

else echo "<center><font class='red'>Du har indtastet et forkert brugernavn eller password</font><br><br><a href='java script:history.back()'>Tilbage</a></center>";
}
}


else{
?>

<center>
<form action="<? echo $PHP_SELF; ?>?action=login" method="post">
  <table border="0" cellpadding="0" cellspacing="8">
    <tr>
      <td valign="top">
<font class="head">Brugernavn:</font></td>
      <td>
<input type="text" name="brugernavn" class="input">
      </td>
    </tr>
    <tr>
      <td valign="top">
<font class="head">Password:</font></td>
      <td>
<input type="password" name="password" class="input">
      </td>
    </tr>
    <tr>
      <td valign="top" align="right"></td>
      <td align="center">
<input type="submit" value="Login" class="button">
      </td>
    </tr>
  </table>
</form>
</center>


<?
}

include("foot.inc");
?>
Avatar billede davidskp Nybegynder
17. oktober 2002 - 23:29 #14
hov "login" i øverste linie er "logincookie"
Avatar billede hagbardph3 Nybegynder
18. oktober 2002 - 00:07 #15
ok.. så har jeg fået kigget lidt på det... det jeg har lavet er sådan set bare en funktion der tjekker om dit login forsøg er rigtig/forkert og så brugt den sammen med lidt ekstra for at tjekke før vi setter cookien... (Er lidt søvnig og det hele, men tror den virker)
Avatar billede hagbardph3 Nybegynder
18. oktober 2002 - 00:08 #16
<?
function checkuser($brugernavn, $password)
{
if($brugernavn == "bruger" && $password == "password")
return true;
else
return false;
}

if(isset($brugernavn) && isset($password) && checkuser($brugernavn, $password))
{
    setcookie("login","1",time()+3600);
    header ("Location: test.php");
}
    if($login == "1")
    {
        echo "<center>Du er allerede logget ind</center>";
    }
    else
    {



    if($action == "login")
    {
(...osv...)
Avatar billede davidskp Nybegynder
18. oktober 2002 - 00:39 #17
jeg tror det virker nu :-)
Mange tak for hjælpen...du må meget gerne få pointene hvis du vil...
Avatar billede hagbardph3 Nybegynder
18. oktober 2002 - 01:02 #18
great... så må du gå ud i køkkenet og få dig en små-kage... :-)
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