Avatar billede gizmo1234 Nybegynder
04. marts 2004 - 23:19 Der er 32 kommentarer og
2 løsninger

Sikkert login - ikke htaccess

Hej.
Jeg har et lille problem. Jeg skal have smidt en kode på min side, og normalt bruger jeg htaccess, men dette webhotel har ikke apache (det har concor vist ikke), så nu skal jeg finde et andet sikkert login. Det skal som sagt være sikkert, og så skal den sætte kode på hele den mappe man har sat den til i, så man ikke bare kan skrive adressen til siden man kommer hen på, og så er det det. Er der nogen der har nogle forslag?
Avatar billede Slettet bruger
05. marts 2004 - 10:51 #1
kan du ikke bare bruge session
og

if ($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF'])
{
    echo "Denne fil kan ikke tilgås direkte";
    exit();
}

siden kan så ikke åbnes direkte den kan kun includes nu...

ved ikke om det lige var det du ville men du kan ikke password beskytte en mappe uden htaccess
Avatar billede Slettet bruger
05. marts 2004 - 10:52 #2
session testen vil så være

if ($_SESSION['login'] != "true") {
    echo "Du har ikke adgang til denne fil";
    exit();
}
Avatar billede gizmo1234 Nybegynder
05. marts 2004 - 18:32 #3
Lyder som en god løsning, men kender ikke til session, så hvordan skal det sættes op helt rigtigt?
Avatar billede Slettet bruger
05. marts 2004 - 19:12 #4
et lille eksempel (Session_start SKAL være i start af fil

<?php
session_start();

if ($_SESSION['login'] !== true) {
  echo '<FORM METHOD=\"POST\" ACTION=\"?show=login&check=true\">';       
  echo '<table class="text" border="0">';
  echo '<tr>';
  echo '<td>Brugernavn:</td>';
  echo '<td><INPUT TYPE="text" NAME="brugernavn"></td>';
  echo '</tr>';
  echo '<tr>;
  echo '<td>Password:</td>';
  echo '<td><INPUT TYPE="password" NAME="password"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td><INPUT TYPE="submit" class="button" value="Login"></td>';
  echo '<td><INPUT TYPE="reset" class="button"></td>';
  echo '</tr>';
  echo '</table>';
  echo '</FORM>';
}
else {
  $query = "SELECT * FROM `brugere` WHERE `brugernavn` = '".$_POST['brugernavn']."'';
  $result = mysql_query($query) or die("MySQL Query fejl");
         
  $row = mysql_fetch_array($result);

  if (mysql_num_rows($result) > 0) {
    if ($row['password'] == md5($_POST['password'])) {
      $_SESSION['login'] = true;
    }
    else {
      echo "<b>Fejl</b>';
      echo "<br><br>';
      echo "Password er forkert!';
    }
  }
  else {
    echo "<b>Fejl</b>';
    echo "<br><br>';
    echo "Brugernavn er forkert!';
  }
}
?>
Avatar billede Slettet bruger
05. marts 2004 - 19:12 #5
hov...

echo '<FORM METHOD=\"POST\" ACTION=\"?show=login&check=true\">';

skulle være

echo '<FORM METHOD="POST" ACTION="?show=login">';
Avatar billede Slettet bruger
05. marts 2004 - 19:14 #6
husk også lige at ændre din ACTION så den passer til dig..

dvs ACTION="login.php"
Avatar billede gizmo1234 Nybegynder
05. marts 2004 - 19:27 #7
Det her er min kode:

<?php
session_start();

if ($_SESSION['login'] !== true) {
  echo '<FORM METHOD="POST" ACTION="?show=login">';     
  echo '<table class="text" border="0">';
  echo '<tr>';
  echo '<td>Brugernavn:</td>';
  echo '<td><INPUT TYPE="text" NAME="brugernavn"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td>Password:</td>';
  echo '<td><INPUT TYPE="password" NAME="password"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td><INPUT TYPE="submit" class="button" value="Login"></td>';
  echo '<td><INPUT TYPE="reset" class="button"></td>';
  echo '</tr>';
  echo '</table>';
  echo '</FORM>';
}
else {
  $query = "SELECT * FROM `brugere` WHERE `brugernavn` = '".$_POST['brugernavn']."'';
  $result = mysql_query($query) or die('MySQL Query fejl');
         
  $row = mysql_fetch_array($result);

  if (mysql_num_rows($result) > 0) {
    if ($row['password'] == md5($_POST['password'])) {
      $_SESSION['login'] = true;
    }
    else {
      echo "<b>Fejl</b>';
      echo "<br><br>';
      echo "Password er forkert!';
    }
  }
  else {
    echo "<b>Fejl</b>';
    echo "<br><br>';
    echo "Brugernavn er forkert!';
  }
}
?>

Men så skriver den:

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\W3Sites\mofinfo\www\pass\admin.php on line 29
Avatar billede Slettet bruger
05. marts 2004 - 19:46 #8
ja jeg opdagede lige at jeg skrev det lidt for hurtigt...

<?php
session_start();

if ($check != true) {
  echo '<FORM METHOD="POST" ACTION="login.php">';
  echo '<INPUT TYPE="hidden" value="true" name="check">';       
  echo '<table class="text" border="0">';
  echo '<tr>';
  echo '<td>Brugernavn:</td>';
  echo '<td><INPUT TYPE="text" NAME="brugernavn"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td>Password:</td>';
  echo '<td><INPUT TYPE="password" NAME="password"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td><INPUT TYPE="submit" class="button" value="Login"></td>';
  echo '<td><INPUT TYPE="reset" class="button"></td>';
  echo '</tr>';
  echo '</table>';
  echo '</FORM>';

}
else {
  $query = "SELECT * FROM `brugere` WHERE `brugernavn` = '".$_POST['brugernavn']."'";
  $result = mysql_query($query) or die("MySQL Query fejl");
         
  $row = mysql_fetch_array($result);

  if (mysql_num_rows($result) > 0) {
    if ($row['password'] == md5($_POST['password'])) {
      $_SESSION['login'] = true;
    }
    else {
      echo '<b>Fejl</b>';
      echo '<br><br>';
      echo 'Password er forkert!';
    }
  }
  else {
    echo '<b>Fejl</b>';
    echo '<br><br>';
    echo 'Brugernavn er forkert!';
  }
}
?>
Avatar billede gizmo1234 Nybegynder
05. marts 2004 - 19:55 #9
Skal der ikke være et sted hvor man connecter til databasen?
Avatar billede Slettet bruger
05. marts 2004 - 20:05 #10
jo men i din index.php sætter du bare (i toppen)

<?php
    include "mysql.php";
?>
som indeholder

<?php
$mysql_database = "DATABASENAVN";
$mysql_hostname = "localhost";
$mysql_username = "MYSQL BRUGER";
$mysql_password = "PASSWORD";

mysql_connect($mysql_hostname, $mysql_username, $mysql_password);
mysql_select_db($mysql_database) or die (mysql_error());
?>
Avatar billede gizmo1234 Nybegynder
05. marts 2004 - 20:06 #11
Nej, det skal der åbenbart ikke.
Jeg har fået det til at virke 50% nu :)

Det der virker er at man ikke bare kan gå direkte ind på siden, så den er er god nok.

Det har jeg gjort ved at smide dette helt i toppen på den side hvor de ikke må kunne komme ind uden login:

<?php
if ($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF'])
{
    echo "Denne fil kan ikke tilgås direkte";
    exit();
}
if ($_SESSION['login'] != "true") {
    echo "Du har ikke adgang til denne fil";
    exit();
}
?>

Men selv når man skriver login så står der "Du har ikke adgang til denne fil", og det er jo ikke så smart :)

den side hvor login scriptet står er:

<?php
session_start();

if ($check != true) {
  echo '<FORM METHOD="POST" ACTION="admin2.php">';
  echo '<INPUT TYPE="hidden" value="true" name="check">';       
  echo '<table class="text" border="0">';
  echo '<tr>';
  echo '<td>Brugernavn:</td>';
  echo '<td><INPUT TYPE="text" NAME="brugernavn"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td>Password:</td>';
  echo '<td><INPUT TYPE="password" NAME="password"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td><INPUT TYPE="submit" class="button" value="Login"></td>';
  echo '<td><INPUT TYPE="reset" class="button"></td>';
  echo '</tr>';
  echo '</table>';
  echo '</FORM>';

}
else {
  $query = "SELECT * FROM `login` WHERE `brugernavn` = '".$_POST['brugernavn']."'";
  $result = mysql_query($query) or die("MySQL Query fejl");
         
  $row = mysql_fetch_array($result);

  if (mysql_num_rows($result) > 0) {
    if ($row['password'] == md5($_POST['password'])) {
      $_SESSION['login'] = true;
    }
    else {
      echo '<b>Fejl</b>';
      echo '<br><br>';
      echo 'Password er forkert!';
    }
  }
  else {
    echo '<b>Fejl</b>';
    echo '<br><br>';
    echo 'Brugernavn er forkert!';
  }
}
?>
Avatar billede Slettet bruger
05. marts 2004 - 20:10 #12
har du sat dette i toppen af login.php ? det er jo ikke så smart.. ellers skal du lige forklare hvilke filer du har

if ($_SESSION['login'] != "true") {
    echo "Du har ikke adgang til denne fil";
    exit();
}

eftersom man dermed aldrig vil kunne logge ind
Avatar billede gizmo1234 Nybegynder
05. marts 2004 - 20:13 #13
admin.php (den side hvor man skal logge ind):

<?php
    include "mysql.php";
?>
<?php
session_start();

if ($check != true) {
  echo '<FORM METHOD="POST" ACTION="admin2.php">';
  echo '<INPUT TYPE="hidden" value="true" name="check">';       
  echo '<table class="text" border="0">';
  echo '<tr>';
  echo '<td>Brugernavn:</td>';
  echo '<td><INPUT TYPE="text" NAME="brugernavn"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td>Password:</td>';
  echo '<td><INPUT TYPE="password" NAME="password"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td><INPUT TYPE="submit" class="button" value="Login"></td>';
  echo '<td><INPUT TYPE="reset" class="button"></td>';
  echo '</tr>';
  echo '</table>';
  echo '</FORM>';

}
else {
  $query = "SELECT * FROM `login` WHERE `brugernavn` = '".$_POST['brugernavn']."'";
  $result = mysql_query($query) or die("MySQL Query fejl");
         
  $row = mysql_fetch_array($result);

  if (mysql_num_rows($result) > 0) {
    if ($row['password'] == md5($_POST['password'])) {
      $_SESSION['login'] = true;
    }
    else {
      echo '<b>Fejl</b>';
      echo '<br><br>';
      echo 'Password er forkert!';
    }
  }
  else {
    echo '<b>Fejl</b>';
    echo '<br><br>';
    echo 'Brugernavn er forkert!';
  }
}
?>




Admin2.php (den side hvor man kommer hen når man har logget ind):
Avatar billede gizmo1234 Nybegynder
05. marts 2004 - 20:13 #14
Hov, en fejl at jeg kom til at trykke send.

Admin2.php (den side hvor man kommer hen når man har logget ind):

<?php
if ($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF'])
{
    echo "Denne fil kan ikke tilgås direkte";
    exit();
}
if ($_SESSION['login'] != "true") {
    echo "Du har ikke adgang til denne fil";
    exit();
}
?>


Det står i toppen af dokumentet, og så nedenunder kommer selve indholdet på siden
Avatar billede Slettet bruger
05. marts 2004 - 20:24 #15
jamen det kan du ikke sådan, når du gør det på den måde så logger du slet ikke ind
når du trykker submit så ryger du over til admin2.php og den fil indeholder ikke login scriptet derfor skal du tilføje et link til admin2.php
efter
if ($row['password'] == md5($_POST['password'])) {
$_SESSION['login'] = true;

dvs
if ($row['password'] == md5($_POST['password'])) {
$_SESSION['login'] = true;
echo '<a href="admin2.php">Til admin2</a>

eller også skal du dele login scriptet ud men det vil være ulogisk..
Avatar billede Slettet bruger
05. marts 2004 - 20:25 #16
argh

echo '<a href="admin2.php">Til admin2</a>';
Avatar billede gizmo1234 Nybegynder
05. marts 2004 - 22:36 #17
Det hjalp ikke.
Her er den side hvor man logger ind:

<?php
$connection = mysql_connect("localhost","******","******");
mysql_select_db("******", $connection);


session_start();

if ($check != true) {
  echo '<FORM METHOD="POST" ACTION="admin2.php">';   
  echo '<INPUT TYPE="hidden" value="true" name="check">';       
  echo '<table class="text" border="0">';
  echo '<tr>';
  echo '<td>Brugernavn:</td>';
  echo '<td><INPUT TYPE="text" NAME="brugernavn"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td>Password:</td>';
  echo '<td><INPUT TYPE="password" NAME="password"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td><INPUT TYPE="submit" class="button" value="Login"></td>';
  echo '<td><INPUT TYPE="reset" class="button"></td>';
  echo '</tr>';
  echo '</table>';
  echo '</FORM>';

}
else {
  $query = "SELECT * FROM `login` WHERE `brugernavn` = '".$_POST['brugernavn']."'";
  $result = mysql_query($query) or die("MySQL Query fejl");
         
  $row = mysql_fetch_array($result);

  if (mysql_num_rows($result) > 0) {
    if ($row['password'] == md5($_POST['password'])) {
$_SESSION['login'] = true;
echo '<a href="admin2.php">Til admin2</a>';

    }
    else {
      echo '<b>Fejl</b>';
      echo '<br><br>';
      echo 'Password er forkert!';
    }
  }
  else {
    echo '<b>Fejl</b>';
    echo '<br><br>';
    echo 'Brugernavn er forkert!';
  }
}
?>


Skal man ikke også ændre i ACTION="" ?
Avatar billede Slettet bruger
05. marts 2004 - 22:40 #18
ja det ville jo nok løse problematikken
Avatar billede gizmo1234 Nybegynder
05. marts 2004 - 22:42 #19
Tænkte jeg nok, så er spørgsmålet bare lige hvad man skal ændre ACTION="" til?
Avatar billede Slettet bruger
05. marts 2004 - 23:39 #20
du har login scriptet i admin.php ikke så skal du sætte action til det. og så linke til admin2.php som jeg skrev lidt oppe
Avatar billede gizmo1234 Nybegynder
06. marts 2004 - 07:28 #21
Jeg fatter altså ikke hvad jeg gør forkert.

Du kan se hvad der sker her: http://www.mof.net/pass/admin.php

Og her er hvad der står i admin.php:

<?php
session_start();

$connection = mysql_connect("localhost","******","******");
mysql_select_db("uploade00276", $connection);

if ($check != true) {
  echo '<FORM METHOD="POST" ACTION="admin.php">';   
  echo '<INPUT TYPE="hidden" value="true" name="check">';       
  echo '<table class="text" border="0">';
  echo '<tr>';
  echo '<td>Brugernavn:</td>';
  echo '<td><INPUT TYPE="text" NAME="brugernavn"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td>Password:</td>';
  echo '<td><INPUT TYPE="password" NAME="password"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td><INPUT TYPE="submit" class="button" value="Login"></td>';
  echo '<td><INPUT TYPE="reset" class="button"></td>';
  echo '</tr>';
  echo '</table>';
  echo '</FORM>';

}
else {
  $query = "SELECT * FROM `login` WHERE `brugernavn` = '".$_POST['brugernavn']."'";
  $result = mysql_query($query) or die("MySQL Query fejl");
         
  $row = mysql_fetch_array($result);

  if (mysql_num_rows($result) > 0) {
    if ($row['password'] == md5($_POST['password'])) {
$_SESSION['login'] = true;
echo '<a href="admin2.php">Til admin2</a>';

    }
    else {
      echo '<b>Fejl</b>';
      echo '<br><br>';
      echo 'Password er forkert!';
    }
  }
  else {
    echo '<b>Fejl</b>';
    echo '<br><br>';
    echo 'Brugernavn er forkert!';
  }
}
?>

Og her er hvad der står i admin2.php:

<?php
if ($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF'])
{
    echo "Denne fil kan ikke tilgås direkte";
    exit();
}
if ($_SESSION['login'] != "true") {
    echo "Du har ikke adgang til denne fil";
    exit();
}
?>


Som du kan se i det link der så kommer den bare tilbage til login siden igen, og det er det.
Avatar billede gizmo1234 Nybegynder
06. marts 2004 - 07:30 #22
Du kan forresten prøve at logge ind med:

brugernavn: bruger
password: password
Avatar billede sukos Juniormester
06. marts 2004 - 10:01 #23
Prøv med:

if (!isset($_POST["check"])) {

i stedet for

if ($check != true) {
Avatar billede gizmo1234 Nybegynder
06. marts 2004 - 13:10 #24
Der skete noget nyt, nu skriver den at det er et forkert password jeg skriver.

Har lige ændret lidt i det:

bruger: 1
password: 2 

Så er jeg sikker på at jeg ikke skriver forkert :)

Her kan du se loginsiden:

<?php
session_start();

$connection = mysql_connect("localhost","******","******");
mysql_select_db("******", $connection);

if (!isset($_POST["check"])) {
  echo '<FORM METHOD="POST" ACTION="admin.php">';   
  echo '<INPUT TYPE="hidden" value="true" name="check">';       
  echo '<table class="text" border="0">';
  echo '<tr>';
  echo '<td>Brugernavn:</td>';
  echo '<td><INPUT TYPE="text" NAME="brugernavn"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td>Password:</td>';
  echo '<td><INPUT TYPE="password" NAME="password"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td><INPUT TYPE="submit" class="button" value="Login"></td>';
  echo '<td><INPUT TYPE="reset" class="button"></td>';
  echo '</tr>';
  echo '</table>';
  echo '</FORM>';

}
else {
  $query = "SELECT * FROM `login` WHERE `brugernavn` = '".$_POST['brugernavn']."'";
  $result = mysql_query($query) or die("MySQL Query fejl");
         
  $row = mysql_fetch_array($result);

  if (mysql_num_rows($result) > 0) {
    if ($row['password'] == md5($_POST['password'])) {
$_SESSION['login'] = true;
echo '<a href="admin2.php">Til admin2</a>';

    }
    else {
      echo '<b>Fejl</b>';
      echo '<br><br>';
      echo 'Password er forkert!';
    }
  }
  else {
    echo '<b>Fejl</b>';
    echo '<br><br>';
    echo 'Brugernavn er forkert!';
  }
}
?>
Avatar billede Slettet bruger
06. marts 2004 - 13:11 #25
Scriptet virker med if ($check != true) { har lige testet det...

hvis du vil kan du kikke på

www.aalm.dk/exp/admin.php
www.aalm.dk/exp/admin2.php
www.aalm.dk/exp/md5.php

jeg tror at din fejl skal findes i din mysql database.. er du sikker på at dine referencer til databasen er korrekt?
Avatar billede Slettet bruger
06. marts 2004 - 13:12 #26
er dit password overhovedet md5 krypteret?

hvis ikke så gør det lige på det 3 link jeg skrev
Avatar billede gizmo1234 Nybegynder
06. marts 2004 - 13:18 #27
Nej, mit password var ikke krypteret. Kan du ikke lige skrive indholdet i den side hvor man kryptere det, så jeg kan gøre det ved mine egne password senere hen?

Og nu virker det. Tusinde tak begge 2!

Kommer i lige med et svar begge 2, så får Sukos 10 points og spillemand 20 :)
Avatar billede Slettet bruger
06. marts 2004 - 13:19 #28
<?php
        echo "<FORM METHOD=\"POST\" ACTION=\"md5.php\">\n";               
        echo "<table class=\"text\" border=\"0\">\n";
        echo "<tr>\n";
        echo "<tr>\n";
        echo "<td>Password:</td>\n";
        echo "<td><INPUT TYPE=\"password\" NAME=\"password\"></td>\n";
        echo "</tr>\n";
        echo "<tr>\n";
        echo "<td><INPUT TYPE=\"submit\" class=\"button\" value=\"md5\"></td>\n";
        echo "<td><INPUT TYPE=\"reset\" class=\"button\"></td>\n";
        echo "</tr>\n";
        echo "</table>\n";
        echo "</FORM>\n";

        echo "password er ".md5($_POST['password'])."";
    ?>
Avatar billede gizmo1234 Nybegynder
06. marts 2004 - 13:20 #29
Hov, nyt problem er kommet nu.
Når man er logget ind så kommer linket med gå til admin2 frem som den skal.
Men når man klikker på linket så står der "Du har ikke adgang til denne fil"

Det her står der i toppen af admin2:

<?php
if ($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF'])
{
    echo "Denne fil kan ikke tilgås direkte";
    exit();
}
if ($_SESSION['login'] != "true") {
    echo "Du har ikke adgang til denne fil";
    exit();
}
?>
Avatar billede Slettet bruger
06. marts 2004 - 13:20 #30
forresten skal du nok fjerne den der så filen ikke kan tilgås direkte.. det vil volde dig problemer når du ikke includer filen... desuden er det også sikkert nok da man skal logge ind for at få adgang...
Avatar billede gizmo1234 Nybegynder
06. marts 2004 - 13:23 #31
Skal jeg fjerne

<?php
if ($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF'])
{
    echo "Denne fil kan ikke tilgås direkte";
    exit();
}
if ($_SESSION['login'] != "true") {
    echo "Du har ikke adgang til denne fil";
    exit();
}
?>

fra admin2?

Så kan man jo bare gå direkte ind i filen?
Avatar billede gizmo1234 Nybegynder
06. marts 2004 - 13:27 #32
Har lige sat points op til 100 for det her har/er en større opgave. Men jeg mangler lige at få klaret det sidste
Avatar billede Slettet bruger
06. marts 2004 - 13:28 #33
har du ikke msn det går en del hurtigere

spassernar@hotmail.com
Avatar billede gizmo1234 Nybegynder
06. marts 2004 - 14:02 #34
Nu virker det sku, tusinde tak spillemand.

Har besluttet at du får alle de 100 points, fordi du har lavet mest ;)
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