Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ongelmia koodissa 470 (äh...)

Sivun loppuun

SysRq868 [11.07.2004 13:22:42]

#

https://www.ohjelmointiputka.net/koodivinkit/23878-php-kirjautuminen-sessioneilla
eli sisäänkirjautuminen sessioneilla... muokkasin koodia niin, että se tekisi rekisteröitymisen ohessa tiedoston <käyttäjänimi>.dat, ja kirjoittaisi oletusarvot sinne. Tekee tiedoston ja kirjottelee ihan hyvin, mutta rekisteröityä käyttäjää ei löydy, kun kirjautuu sisään.

Miksi?

Koodi:

  }
  elseif (isset($_POST["rekisteroidy"])) {
    if (in_array($tunnus, $userit) == $null) {
      if ($salasana == $salasana2) {
        if (strlen($tunnus) >= 3) {
          if (strlen($salasana) >= 3) {
            $fo = fopen($tiedosto, "a");
            flock($fo, 2);
            fwrite($fo, $tunnus ."|". $email ."|". md5($salasana) ."|\n");
            flock($fo, 3);
            fclose($fo);

            $crprof = "profiles/". $tunnus .".dat";
            touch($crprof);
            $proc = fopen($crprof, "a");
            flock($proc, 2);
            // etunimi, sukunimi, ikä, sukupuoli, email, osoiteet 1 ja 2, postnum, postpaik, kuvaus, kuvan url, kuvateksti, os-otsikko, os-tausta, os-teksti, os-linkki, os-vapaa html
            fwrite($proc, "Etunimi|Sukunimi|0|1|". $email ."|Nollakatu 0|Huone 0|00000|Helsinki|Ei kuvausta.|0.gif|Ei kuvatekstiä|Sivun otsikko|#FFFFFF|#000000|#0000FF|Minä täällä hei.");
            flock($proc, 3);
            fclose($proc);

            echo "<b>Rekisteröinti on valmis!</b><br>\n";
            echo "Voit nyt kirjautua sisään <a href=\"". $tarkastus ."\">tästä</a>.";
          }
          else {
            echo "<b>Epäkelpo salasana.</b><br>\n";
            echo "Voit rekisteröityä toisella salasanalla klikkaamalla <a href=\"". $tarkastus ."?act=rekisteroidy\">tästä</a>.";
          }
        }

...bloo bloo...

muuten on ihan sama koodi kuin itse vinkissä... anteeksi että taas häiritsen...

SysRq868 [12.07.2004 15:03:22]

#

HALOO?! Saa vastata!

acorn [12.07.2004 15:14:22]

#

Arvaus: Muutit vain rekisteröintiä, et kirjautumista. Kirjautuminen yrittää hakea kaiken samasta paikasta kuin ennenkin, mutta rekisteröityminen tekee toisin.

SysRq868 [12.07.2004 15:35:42]

#

eli miten sen voisi korjata?

Blaze [12.07.2004 15:44:23]

#

Muuttamalla sitä kirjautumista(kin)? :)

SysRq868 [12.07.2004 15:48:46]

#

...että se avaisi tuon failin <käyttäjä>.dat, ja jättäisi sen auki?

tsuriga [12.07.2004 15:49:32]

#

Hups oli siel muuallaki entry alustettu.

EDIT: Tällä kertaa oot sentäs jaksanu laittaa muutaki otsikoks ku pelkän "äh..."

SysRq868 [12.07.2004 15:52:36]

#

hmm... userit.txt -tiedostoon sitä ei voi laittaa, koska silloin voisi kuka tahansa hakkeri mennä katsomaan salasanoja yms. mitä ei haluta näyttää...

EDIT: heh. mutta olipas se siellä kuitenkin!
EDIT 2: no, sitäpä tämä php on: äh, äh, ja äh!!! (...)

tsuriga [12.07.2004 15:54:15]

#

laita se kayttajat.txt jonnekin htaccessilla suojattuun kansioon ja chmodaa se oikein niin, että php pääsee sitä tutkimaan, mutta käyttäjät eivät. Ja laita tiedostopäätteeks .php ja laita ensimmäiseks riviks die("Eipäs h4xata");

SysRq868 [12.07.2004 15:56:14]

#

joo, mut sepä ei ollukkaa se juttu jota hain, jos satuit unohtamaan...

kopsasin vain tuon edellä olevan kirjoitusfunktion ja lisäsin sinne ihanasti touchin, mutta ei vörki. :D

jaa-a.


EDIT:
JATKUU... (se koodi mihin se jäi.)

        else {
          echo "<b>Epäkelpo tunnus \"<i>". $tunnus ."</i>\".</b><br>\n";
          echo "Voit rekisteröityä toisella tunnuksella klikkaamalla <a href=\"". $tarkastus ."?act=rekisteroidy\">tästä</a>.";
        }
      }
      else {
        echo "<b>Salasanat eivät täsmää.</b><br>\n";
        echo "Voit rekisteröityä uudelleen klikkaamalla <a href=\"". $tarkastus ."?act=rekisteroidy\">tästä</a>.";
      }
    }
    else {
      echo "<b>Tunnus \"<i>". $tunnus ."</i>\" on jo käytössä.</b><br>\n";
      echo "Voit rekisteröityä toisella tunnuksella klikkaamalla <a href=\"". $tarkastus ."?act=rekisteroidy\">tästä</a>.";
    }
  }
  else {
    if ($_GET["act"] == "rekisteroidy") {
      echo "<form action=\"". $tarkastus ."\" method=\"post\">\n";
      echo "<b>_rekisteröidy</b><br>\n";
      echo "Jos sinulla on jo tunnus, <a href=\"". $tarkastus ."\">kirjaudu</a>.<br>\n";
      echo "Tunnus: <input type=\"text\" name=\"tunnus\"><br>\n";
      echo "E-mail: <input type=\"text\" name=\"email\"><br>\n";
      echo "Salasana: <input type=\"password\" name=\"salasana\"><br>\n";
      echo "Uudelleen: <input type=\"password\" name=\"salasana2\"><br>\n";
      echo "<input type=\"submit\" value=\"Rekisteröidy\" name=\"rekisteroidy\">\n";
      echo "</form>";
    }
    else {
      echo "<form action=\"". $tarkastus ."\" method=\"post\">\n";
      echo "<b>_kirjaudu_sisään</b><br><br>\n";
      echo "Tunnus:<br><input type=\"text\" name=\"tunnus\"><br>\n";
      echo "Salasana:<br><input type=\"password\" name=\"salasana\"><br>\n";
      echo "<input type=\"submit\" value=\"Sisään\" name=\"kirjaudu\">\n";
      echo "</form>";
    }
  }

}
else {
echo "<b>Kirjautunut.</b><br><br>\n";
echo "Hallinnoi käyttäjääsi <a href=\"". $etusivu ."\">täällä</a>.<br>";
echo "Voit halutessasi kirjautua ulos <a href=\"logout.php\">tästä</a>.";
}
?>

...ja tässä itse alku...

<?php
session_start();
$tiedosto = "userit.txt";
$tarkastus = "front.php";
$etusivu = "userfilu.php";
if(!file_exists($tiedosto)) {
  touch($tiedosto);
  chmod($tiedosto, "0766");
}
$data = file($tiedosto);
$userit = array();
for ($i=0; $i<count($data); $i++) {
  $entry = explode("|", $data[$i]);
  $userit[$i] = $entry[0];
}
function clean ($string) {
  $string = str_replace("|", "", $string);
  $string = strip_tags($string);
  $string = ereg_replace("\n", "", $string);
  return strtolower($string);
}
if (empty($_SESSION["sess_tunnus"]) || $_SESSION["sess_iposoite"] != $_SERVER["REMOTE_ADDR"]) {
  $tunnus = clean($_POST["tunnus"]);
  $email = clean($_POST["email"]);
  $salasana = clean($_POST["salasana"]);
  $salasana2 = clean($_POST["salasana2"]);
  if (isset($_POST["kirjaudu"])) {
    if (in_array($tunnus, $userit) != "") {
      $entry = explode("|", $data[array_search($tunnus, $userit)]);
      if ($entry[2] == md5($salasana)) {
        session_register("sess_tunnus");
        $_SESSION["sess_tunnus"] = $tunnus;
        session_register("sess_iposoite");
        $_SESSION["sess_iposoite"] = $_SERVER["REMOTE_ADDR"];
        // Tässä on sitten varmaan jotai skörbää...
        echo "<b>Kirjautunut.</b><br><br>\n";
        echo "Hallinnoi käyttäjääsi <a href=\"". $etusivu ."\">täällä</a>.<br>";
        echo "Voit halutessasi kirjautua ulos <a href=\"logout.php\">tästä</a>.";
      }
      else {
        echo "<b>Virheellinen salasana.</b><br>\n";
        echo "Voit kirjautua uudelleen klikkaamalla <a href=\"". $tarkastus ."\">tästä</a>.";
      }
    }
    else {
      echo "<b>Tunnusta \"<i>". $tunnus ."</i>\" ei löydy.</b><br>\n";  // MITEN NIIN?
      echo "Voit kirjautua uudelleen klikkaamalla <a href=\"". $tarkastus ."\">tästä</a>.";
    }
  }

tsuriga [12.07.2004 16:27:32]

#

Tuo on kyllä hieman huonohko, sillä tuo käyttäjän etsintä on casesensitive. Tietysti ihan miten haluaa. En nyt jaksa kyllä tarkemmin tutkia, mutta voisin vinkkailla, että debuggaa, tulostele noita taulukoita ja katso eikö sitä tunnusta tosiaan löydy sieltä.

jrantala [12.07.2004 16:39:53]

#

Salasanat olis hyvä kryptaa... md5($salasana)...

Onkos ne salasanat ees kryptattu? Koodi vaatii toimiakseen salasanojen kryptaamisen...

SysRq868 [12.07.2004 17:00:59]

#

tunnus löytyy kyllä.

en ymmärrä. sitten taas käyttäjät joilla ei ole testin takia tätä profile .dat -tiedostoa, toimivat kuitenkin.

passyt on laitettu jotenkin md5:llä. enemmän teknisiä tietoja Tumpilta, hän tämän skriptin teki.

tsuriga [12.07.2004 17:34:29]

#

Tuolla on in_array($tunnus, $userit) != "".
in_array palauttaa booleanin eli kokeiles fixaa tota. Aika outoa sinänsä, sillä jos et ole kirjautumista vaihtanut mitenkään, etkä myöskään ole koskenut rekisteröitymisen userit.txt:hen kirjoittamis -osioon niin kyllä sen pitäisi toimia. Pistä jokaisen iffin jälkeen tulostamaan jotain ja katso missä ei enää tulosta mitään.

SysRq868 [12.07.2004 17:49:18]

#

okei.

EDIT: kiinni! rivin

    if (in_array($tunnus, $userit) != "") {

jälkeen ei mitään echojani!!!
...mutta miten tämän voi korjata?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta