Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Apua kirjautumisskriptissä

Sivun loppuun

Kentti [29.11.2006 20:17:05]

#

Olen (monta kertaa) kokeillut tehdä oman loginskriptin PHP:llä, huonoin tuloksin. Istuntoja ja keksejä ja niin edelleen olen kokeillut.
Tuo pitäisi saada toimimaan tekstitietokannalla, ja käyttäjämäärät tuskin aivan hirveät tulisi olemaan.
Perus .htacces kyllä onnistuu helposti, mutta jostain syystä en saa lomakepohjaista toimimaan...

Voisiko joku ohjata oikeaan suuntaan?

juha127 [29.11.2006 21:15:27]

#

Kysymyksesi on hieman laaja, että...
Tiedot voit tallentaa teksti tiedostoon, joka on vaikka omassa hakemistossa ja suojattu .htacces:lla. Muoto voisi olla: tunnus::|::vähintään md5 cryptattu passu
Tuohon voit laittaa erinäisiä asioita aina ::|:: merkillä erotettuna ja rekkaamisessa voit vielä tarkistaa ettei tunnus tai passu sisällä tätä ::|:: merkkiä.

Lebe80 [29.11.2006 21:49:35]

#

ja tiedosto, jossa käyttäjien tiedot on, on nimetty joksikin muuksi, kuin kayttajat.txt.

Kentti [29.11.2006 22:03:25]

#

Juu... siis ei noissa kohdissa ole mitään ongelmaa, vaan siinä itse php-skriptissä.. Sitä en ole saanut toimimaan.

Kentti kirjoitti:

Perus .htacces kyllä onnistuu helposti

Tuolla taas tarkoitin, että sellainen suojaus, jossa tulee se please authenticate (tjs) ikkuna onnistuu (headereja käyttäen)

Mutta ei esim. sellainen kuin putkassa.

tsuriga [29.11.2006 22:28:51]

#

Md5 ei ole kryptausalgoritmi, vaan kryptografinen tiivistealgoritmi - sillä lasketaan tiiviste datasta. Näitä kirjautumisskriptejä löytyy Internetistä, jopa Putkastakin, valmiina enemmän kuin etsiä jaksaa.

Kentti [30.11.2006 08:55:50]

#

Putkastakin olen sita "kirjautuminen sessioilla" juttua kokeillut. Se toimi, kun kaikki oli siinä kiinteästi arrayssa, mutta heti kun tekstitiedostosta arrayhyn haki, niin ei..

tmigi [30.11.2006 10:54:22]

#

Kuulostaa siltä, että itse arkkitehtuurissa ei ole vikaa, vaan toteutuksessa. Pistätkö vaikka vähän koodia esille, niin voidaan katsoa missä mättää.

Kentti [30.11.2006 14:42:47]

#

<?php


  function kirjaudu() {

	# Aloita istunto.
	session_start();

	# Muuttujia...
	$kayttis = strip_tags($_POST['tunnus']);
	$pswd = strip_tags($_POST['salasana']);
	$pswd = sha1($pswd);

	# Jos käyttäjätunnus ja salasana on asetettu. strip_tags()-funktion kanssa ei voi käyttää isset():iä, sillä jonkin arvon tuo tuohon asettaa...
	if ($kayttis != "" and $pswd != "") {

		# Haetaan tunnukset ja salasanat taulukkoon.
		$auth_filu = file_get_contents("autentikaatio.auth");
		$auth_taulukko = explode("\n", $auth_filu);

		foreach ($auth_taulukko as $rivi) {

			# Haetaan tiedostosta muuttujat $kayttajatunnus ja $salasana.
			list($kayttajatunnus, $salasana) = explode("|", $rivi);

			# Jos käyttäjätunnus ja salasana täsmäävät...
			if (strcmp($kayttis, $kayttajatunnus) == 0 and strcmd($pswd, $salasana)) {

				$_SESSION['kayttis'] == $kayttis;
				$_SESSION['pswd'] == $pswd;
				break;

			} else {

				echo "Väärät kirjautumistiedot";
				continue;

			}
		}
	}

	if ($_SESSION['kayttis'] == $kayttis and $_SESSION['pswd'] == $pswd) {

		echo "Sisällä ".$_SESSION['kayttis']."<a href=\"".$_SERVER['PHP_SELF']."?log=out\">Kirjaudu ulos</a>";

	} else {

		echo "Käyttäjätunnus tai salasana väärin";
		echo "<form method=\"post\">";
		echo "<input type=\"text\" name=\"tunnus\">";
		echo "<input type=\"password\" name=\"salasana\">";
		echo "<input type=\"submit\" value=\"Lähetä!\">";
	}
  }

  kirjaudu();

?>

Tuossa voi olla mukana vähän muutakin säätöä, mutta sama koodi se on millä olen tiedostostakin hakua kokeillut...
Ja salasanatiedostossa on kryptaamattomat salasanat, näin testiä varten..

tsuriga [30.11.2006 14:53:16]

#

== -> = (sijoituksessa), echo "\"" -> echo '"', $_SERVER['PHP_SELF'] -> $_SERVER['SCRIPT_NAME'], == -> === (vertailussa), echo "." -> echo " . " (välit selkeyttävät koodia), file_get_contents+explode = file (muista trimmaus jos teet tämän muutoksen). Myös sha1 on tiivistealgoritmi, ei kryptausalgoritmi.

Kentti [30.11.2006 21:06:35]

#

En saanut kyllä vieläkään toimimaan :(

Elekaz [01.12.2006 11:17:50]

#

Tuossa missä tarkistetaan noita tietoja on pari yhtäsuuruusmerkkiä liikaa. Korjaa ne muotoon:

# Jos käyttäjätunnus ja salasana täsmäävät...
if (strcmp($kayttis, $kayttajatunnus) == 0 and strcmd($pswd, $salasana)) {
    $_SESSION['kayttis'] = $kayttis;
    $_SESSION['pswd'] = $pswd;
break;

 }

Ja jos oikein luin tota koodia niin tuo missä tarkistetaan ollaanko sisällä toimii vain sen yhden sivunlatauksen verran. Tämä siitä syystä että muuttujiin $kayttis ja $pswd ei haeta muuten mitään ellei lomakkeelta ole tullut noita tietoja. Kannattaisi muuttaa tuota niin että ensin avataan se tiedosto, sitten tarkistetaan että ollaanko sisällä, jos ei olla niin näytetään kirjautumisformi ja jos ollaan sisällä niin kerrotaan että ollaan sisällä.

Kentti [01.12.2006 20:22:01]

#

No niin.. Nyt kopioin suoraan koodivinkin Kirjautuminen sessioilla (monta käyttäjää) ja tein siihen sen muutoksen, että se hakee ne käyttäjätunnukset & salasanat tiedostosta.

<?php


//Sessiot käyntiin
session_start();

//Tunnukset ja salasanat(md5) taulukkoon
$filu=file("tunnukset.txt");
trim($filu);
$n = 0;
$kayttikset=array();
$salasanat=array();
foreach ($filu as $tunnus) {
	list($kayttis, $pswd) = explode(":", $tunnus);
	$kayttikset[$n]=$kayttis;
	$salasanat[$n]=$pswd;
	$n++;
}

$tunnukset = array_combine($kayttikset, $salasanat);

//Lomakkeen käsittely. Tarkistetaan löytyykö taulukosta vastaavaa kohtaa. Tarvittaessa tulostetaan virheilmoitus.
//Jos löytyi, tallennetaan kirjautumisen tiedot sessioihin.
if(isset($_POST['tunnus'])&&isset($_POST['salasana'])){
        if(md5($_POST['salasana'])==$tunnukset[$_POST['tunnus']]){
                $_SESSION["tunnus"]=$_POST['tunnus'];
                $_SESSION["salasana"]=$_POST['salasana'];
                }
        else echo"Tunnus tai salasana väärin";
        }

//Jos sessioissa olevien tietojen mukaista kohtaa ei löydy taulukosta, tulostetaan kirjautumislomake.
if(md5($_SESSION['salasana'])!=$tunnukset[$_SESSION['tunnus']]){
        echo"<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">
        Tunnus: <input type=\"text\" name=\"tunnus\" /><br />
        Salasana: <input type=\"password\" name=\"salasana\" /><br />
        <input type=\"submit\" value=\"Kirjaudu\" /></form>";
        }

//Muuten muuten tulostetaan tervehdys ja uloskirjautumiseen tarvittava linkki.
else {
        echo"Kirjautuminen onnistui. Tervetuloa ".$_SESSION["tunnus"]."<br />
        <form method=\"post\"><input type=\"submit\" value=\"Kirjaudu ulos!\" name=\"logout\" /></form>";

	//Uloskirjautuminen. Poistetaan sessiot ja näytetään onnistumisviesti.
	if(isset($_POST['logout'])){
        unset($_SESSION["tunnus"]);
        unset($_SESSION["salasana"]);
        echo"Kirjautuminen ulos onnistui.";
        }
        }

?>

Tuo ei siis toimi... Tuo kohta, jossa se haetaan tiedostosta ja tehdään taulukoksi, muodostaa samanlaisen taulukon kuin tämä:

<?php
$tunnukset=array(
"tunnus1" => "8efd6b1b8a4266d19101ebf5a346a42c", //tunnus1 , passu
"tunnus2" => "6b694e8cf87fc88d392ed8ebf81d9385", //tunnus2 , sala
"ja_niin" => "edelleen", //ja_niin , ????????
);
?>

mutta ainoastaan tuollainen, kiinteästi sijoitettu taulukko toimii, ei se minun yritelmä, joka tulostaa vastaavan taulukon..

Mikä siinä minun säädössä tuohon on vikana kun se ei toimi

Metabolix [01.12.2006 20:28:17]

#

Kokeilepa tiedostonlukua näin:

$filu = file("tunnukset.txt");
$tunnukset = array();
foreach ($filu as $tunnus) {
    list($kayttis, $pswd) = explode(":", trim($tunnus));
    $tunnukset[$kayttis] = $pswd;
}

En ole aivan varma, mutta käsittääkseni trim ei tepsi taulukkoon. ^^

Kentti [01.12.2006 20:35:42]

#

P*****E!!!!
Tuon trimmin takia 3 kuukautta pähkäillyt tuota!!!
(Noh.. En ihan koko aikaa, mutta kumminkin..)
ARRGH!!!!


Mutta nyt toimii :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta