Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kirjautumissysteemi ei toimi

Sivun loppuun

Seti [16.12.2009 17:21:41]

#

Terve. Yritän tässä tehdä kirjautumissysteemiä sivulleni. Tekstitiedosto sisältää tunnuksen, salasanan md5-hashina, emailin, ajan ja IP-osoitteen. Tältä näyttää tekstitiedosto:

Tuomas|316e42c120fa778e29b354f5a00f223f||1260975907|80.220.47.70
Erkki|e7e941b1f09f266540c6780db51d5f58||1260976061|80.220.47.70

Tässä on koodi, mikä ei toimi:

<?php

if(isset($_GET["kirjautumislomake"]))
{

	if($_POST["lomake_tunnus"] != "" && $_POST["lomake_salasana"] != "")
	{
		$filu = file($kayttajatilit);

		for($i = 0; $i < count($filu); $i++)
		{
			$tiedot = explode("|", $filu[i]);

			$kayttaja = trim($tiedot[0]);
			$salasana = trim($tiedot[1]);

			$formtunnus = trim($_POST["lomake_tunnus"]);
			$formsalasana = trim($_POST["lomake_salasana"]);

			if($kayttaja == $formtunnus && $salasana == md5($formsalasana))
			{
				echo "Kirjauduit sis&auml;&auml;n tunnuksella " . $kayttaja . "!";
				break;
			}

			if($i == (count($filu) - 1))
				echo "V&auml;&auml;r&auml; tunnus tai salasana!";
		}
	}

	else
		echo "Sinun tarvitsee antaa k&auml;ytt&auml;j&auml;tunnus ja salasana!";

}

?>

Yritän siis kirjautua ja eteeni tulee virheilmoitus: "Väärä tunnus tai salasana!"

Antti Laaksonen [16.12.2009 17:39:06]

#

Yksi dollarimerkki puuttuu: rivillä 12 lukee $filu[i] eikä $filu[$i].

Seti [16.12.2009 17:40:43]

#

Ah, kiitokset. Tuollaisia pikkuvirheitä ei huomaa niitä etsiessä. :)

Juhko [19.12.2009 18:28:20]

#

Kannattaa aina tutkia tarkkaan juuri se rivi, jossa tulkki ilmoittaa virheen olevan.

tsuriga [19.12.2009 18:44:31]

#

Tässä tilanteessa tulkki heittää asiasta vain huomautukset (E_NOTICE), josta syystä huomautukset onkin hyvä pitää päällä kehitysserverillä. Aina tuo tulkin antama virherivin numero ei myöskään natsaa. Näihin tilanteisiin pätee mm. kunnon IDE.

temu92 [19.12.2009 18:46:39]

#

Joskus virhe ei aina ole sillä rivillä kun tulkki sanoo sen olevan :P

Esim.

<?php
    if($lol == true){
        $asd = 2
        echo "Esimerkki";
    }
?>

Tuosta tulkki sanoisi virheen olevan rivillä 4 vaikka tosiasiassa riviltä 3 puuttuu puolipiste lopusta.

Tai jos tuosta ottaa if-lauseen jälkeen aaltosulkeen pois ja puolipistevirhe olisi korjattu, tulkki valittaisi rivistä 5.

Edit: jaha tsuriga ehti väliin :E

mika132 [20.12.2009 22:21:49]

#

Hieman offia, mutta:
Ihan vinkkinä ei ole kannattavaa käyttää tunnuksina tekstitiedostoa vaan MySQL tietokantoja, koska tekstitiedostot ovat erittäin suuri turvallisuus riski sekä joskus niihin kirjoittaessa (esim tulee kaksi rekisteröintiä päällekkäin tai enemmän) olen havainnut tekstitiedostojen "tyhjentymisen".

RQ [21.12.2009 04:05:12]

#

mika132 kirjoitti:

Hieman offia, mutta:
Ihan vinkkinä ei ole kannattavaa käyttää tunnuksina tekstitiedostoa vaan MySQL tietokantoja, koska tekstitiedostot ovat erittäin suuri turvallisuus riski sekä joskus niihin kirjoittaessa (esim tulee kaksi rekisteröintiä päällekkäin tai enemmän) olen havainnut tekstitiedostojen "tyhjentymisen".

...?
Taitaa olla koodissa vika, itse olen käyttänyt tekstitiedostoihin tallentamista monen vuoden ajan eikä mitään vastaavia ongelmia oo tullut vielä vastaan.

Lebe80 [21.12.2009 11:05:13]

#

RQ: kyllä tuollainen on ihan mahdollista, riippuen tietenkin mitä tekstitiedostolle tehdään.

Eli on pieni mahdollisuus, että jos joudutaan kirjoittamaan koko sisältö uudelleen (esim. jos jälkikäteen tallennetaan käyttäjälle esim. uusi salasana), voi samaan aikaan tapahtuva muu muutos rikkoa toiminnon.

Tällöin pitää tiedosto lukita etukäteen, ettei samaan aikaan voida tallentaa toisaalla tiedostoon.


Sivun alkuun

Vastaus

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

Tietoa sivustosta