Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
session ile güvenli giriş yaptırdım.ama hata verdi
#1
session ile oturum açtırdım.. oturumu normalde açıyo.. ama başka sayfaya geçince login olmadınız diyor.. bidaha login oluyom.. başka sayfaya giirince yanı şey bidaha giriyo... bende
guvenlik.php dosyası yaptım.. onda hata veryo
-----------------------------------------------------------------------
<?
session_start();
mysql_connect("localhost","root") || die ("Hata 1");
mysql_select_db("ercan") || die ("Hata 2");


$tablo = "SELECT * FROM sifre WHERE sifre='$_session[$msql_sifre]'";

$sorgu = mysql_query($tablo);
$sifre = @mysql_result($sorgu,0,"sifre");
if ( mysql_num_rows($sorgu) < 1 ) {
header ("Location: sifre_hatasi.php");
}
?>
----------------------------------------------------------------------------

Hata İse

Notice: Undefined variable: msql_sifre in c:\easyphp\www\deneme\guvenlik.php on line 7

Notice: Undefined variable: _session in c:\easyphp\www\deneme\guvenlik.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at c:\easyphp\www\deneme\guvenlik.php:7) in c:\easyphp\www\deneme\guvenlik.php on line 12
Ara
Cevapla
#2
$tablo = "SELECT * FROM sifre WHERE sifre='$_session[$msql_sifre]'";

bu satırda kullandıgınız $msql_sifre daha once tanımlanmamıs. ya yukarda tanımlamanız, ya da tanımlandığı dosyayı include etmeniz gerekmektedir.

yani kod soyle olabilir:

<?
//-----------konfigurasyon---------------
$mysql_sifresi="1234";
//-----------konfigurasyon---------------


session_start();
mysql_connect("localhost","root",$myql_sifresi) || die ("Hata 1");
mysql_select_db("ercan") || die ("Hata 2");


$tablo = "SELECT * FROM sifre WHERE sifre='$_session[$msql_sifre]'";

$sorgu = mysql_query($tablo);
$sifre = @mysql_result($sorgu,0,"sifre");
if ( mysql_num_rows($sorgu) < 1 ) {
header ("Location: sifre_hatasi.php");
}
?>

yanlız, bu kodda bir de mantık hatası var. $msql_sifre yazılan yerde, bir sabit olmalı ve,
$_SESSION['msql_sifre']
seklinde olmalıdır. SESSION, GET, PUT gibi global degiskenler büyük harftir.
Ara
Cevapla
#3
bu konuda yardım edermisinz... oturum açmak için nasıl bi sistem yapmalıyım
Ara
Cevapla
#4
session la koruma site nasıl yapacam??? kodları nasıl olcak....

$tablo = "SELECT * FROM sifre WHERE sifre='$_SESSION['msql_sifre']'";


bu satırda hata var? ben şunu anlamadım....

sifre='$_SESSION['msql_sifre']'";

databasede bulanan şifreyle '$_SESSION['msql_sifre']'"; bunu niye karşılaştırıyoruz?? bikere '$_SESSION['msql_sifre']'"; bu şifreye eşit değilki

php içinde session klasörün içinde sess_e761b4114bec0b6f450e25ec272e2043 böyle bi dosya olusuyo... bu nasıl oluyo ???
Ara
Cevapla
#5
abim bende easyphp kurulu idi.... onda
Kod:
Notice: Undefined variable: msql_sifre in c:\easyphp\www\deneme\guvenlik.php on line 7

Notice: Undefined variable: _session in c:\easyphp\www\deneme\guvenlik.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at c:\easyphp\www\deneme\guvenlik.php:7) in c:\easyphp\www\deneme\guvenlik.php on line 12

bu hatayı veriyooo


ama apachetriadı kurdum.. hata vermiyo çok güzel çalışıyo.....



önceleri.....
$tablo="INSERT INTO sahika VALUES ('$veriler[1]','$veriler[2]','$veriler[3]')"; bu eklemede aynı hata veriyodu (üstteki hata gibi) (easy php de veriyodu)(apachetirada bu hatayıda vermiyo )

sonra easyphp de

$veriler[1]=$_POST['no'];
$veriler[2]=$_POST['ad'];
$veriler[3]=$_POST['soyad'];

bunu keşfettim... easy phpde eklemde hata vermemeye başladı.... demek ki ?


$tablo = "SELECT * FROM sifre WHERE sifre='$_SESSION[msql_sifre]'"; (easyphp bu kod üssteki hatayı verdiriyo)

bunun hata vermemesi için başka bi kod var.... o ney


not: diceniz apachetriad hata vermiyosa onu kullan.. ama ben easyphp yi kullanmak istiyorum... yardımlarınızı bekliyorum
Ara
Cevapla
#6
programların başına
error_reporting (E_ALL ^ E_NOTICE);

ekleyerek notice uyarılarını kapatabilirsin.
notice, özellikle session kullanan yerlerde sıkıntı cıkarır.
ekrana bisiy cıktıktan sonra da sessionm baslatılmaz. bu yüzden, yukardaki satırla notice leri kapatmak gerekir.

apache triadda calısmasının nedeni, muhtemelen onda standart bu ayarın var olmasıdır.

oturum acmak icin ne yapacagını da aksam yazarım.slm.
Ara
Cevapla
#7
bu kodu yazınca..ozman hata vermiyo dogru... ama login olsam bile ! hala login olmadınız diyo... benim anladığım kadarıyla.....


session dan gelen bilgiyi okuyamıyo.... easyphp de session okuma daha farklı gibi geliyoo


not: error_reporting(.....) bunu yazdığımda.... apachetriad daha çalıştırınca sağlam çalşıyo... bunu anladmadım işte
Ara
Cevapla
#8
dün gece uyumadım...kodları yaza bildim şimdi sizle paylaşıyom :

listeleme.php (veri tabanından listeleme)
Kod:
<?php

$bilgivar=false;

mysql_connect("localhost", "root") or die("baglanamadim...");
mysql_select_db("ercan") or die("seçemedim");


$sorgu="SELECT * FROM `sahika`  ORDER BY `no` ASC ";


        $ssorgu=mysql_query($sorgu);

        echo "<table border='1' align='center'>
<tr>
    <td>No</td>
    <td>Ad</td>
    <td>Soyad</td>
    
</tr>";
    $i=0;
    while($ekranabas=mysql_fetch_assoc($ssorgu)) {

    $bilgivar=true;    

    echo "<tr><form method=post action=duz.php>
    <td><input type=text value=$ekranabas[no]   name=no$i ></td>
    <td><input type=text value=$ekranabas[ad]  name=ad$i ></td>
    <td><input type=text value=$ekranabas[soyad] name=soyad$i></td>
</tr>";
$i++;

    }

echo "</table>";
echo    "<td><input type=submit value=Güncelle center=right><td>";
if(!$bilgivar) echo "Listeler Boş.";

include "alt.inc";
?>

buda güncelenme.php (toplu notu giriyo)

Kod:
<?php

$bilgivar=false;

mysql_connect("localhost", "root") or die("baglanamadim...");
mysql_select_db("ercan") or die("seçemedim");

$tablo="select * from sahika";

$sorgu=mysql_query($tablo);

$tablo_sayisi=mysql_num_rows($sorgu);

echo "bulunan adet:".$tablo_sayisi."<br>";
for($i=0;$i<$tablo_sayisi;$i++)
{
$no[$i]=trim($_POST["no$i"]);
$ad[$i]=$_POST["ad$i"];
$soyad[$i]=$_POST["soyad$i"];

$tablo="UPDATE  sahika SET no='$no[$i]' , ad='$ad[$i]', soyad='$soyad[$i]'   WHERE no='$no[$i]'";
echo $no[$i]."-------".$ad[$i]."--------".$soyad[$i]."<br>";
mysql_query($tablo);

}
if(mysql_query($tablo))
{
    echo"Bilgi Düzenlenmiştir.";
    }else{
    echo"Aynı Numaraya Sahip İki Kayit Girdiniz";
    }

?>
Ara
Cevapla
#9
Burda tamamen, nasıl login oldurulur, olunur ve sifreli sayfalar nasıl yapılır onu anlatacagım.
sayfanın iciriğinin ne olduğu önemli değil. ister listeleme yapsın ister başka şeyler.

bidefa, şifreli olacak her sayfanın başına şunları yazacaksınız:

<?
session_start();
$sifre=$_SESSION['sifre'];
$isloggedin=$_SESSION['isloggedin'];
if(($isloggedin!=true)or($sifre=="")){header("Location: loginform.php");exit;};

// diger özel kodlar buraya

?>

bu yukardaki kod, eğer login olunmamissa, loginform dosyasına yönlendirir.
loginform ise, kullaniciadi ve sifre soran basit bir formdur. özel bir kodu yoktur (htmldir.) :


<FORM METHOD='POST' ACTION='login.php'>
<input type=text name=kullaniciadi>
<input type=password name=password>
<input type='Submit' value='Giris'>
</FORM>


bir de login.php var. asıl login yapan, yani kullanıcıyı iceri alan kod burda:


<?

function checkpass($kullaniciadi, $sifre) {

// burda databaseden alacak ve karsılastıracak
// ........................$sql="select sifre from kullanicilar where kullaniciadi='$kullaniciadi'
// .......................burayı da istedigin gibi yazarsin..
// ......................

if($dbdenalinansifre==$sifre) return true;
else return false

}



session_start();
$kullaniciadi=$_POST['kullaniciadi'];
$kullaniciadi=$_POST['password'];

if(($kullaniciadi=="") or ($password==""))
{ echo "Kullanici adi ve sifresi giriniz";exit;};

// kullanıcının sifre kontrolu

if(!(checkpass($kullaniciadi,$password))) {

echo "Sifre hatasi...<br>kullaniciadi: $kullaniciadi <br>
<a href='loginform.php'>Login Ekrani</a> <br><a href=logout.php>Logout</a>";
exit;

};


// kullanıcıyı iceri alma

$_SESSION['kullaniciadi'] = $kullaniciadi;
$_SESSION['isloggedin']=true;
$_SESSION['sifre']=$password;

?>

ha bir de şu var, post ile alınan tüm veri, güvenlik amacıyla, ayrıca bi işleme tabi tutlması lazım.
yukardaki kodlarda bu işlem yok. şuanda önemli olan olayı anlamak olduğu icin, ayrıntıya girmedim.
yukardaki kodlar da calısır, ancak site tam güvenli olmaz, sql injection a acık olur. ilerde onu da bahsederim.
Ara
Cevapla
#10
senin gonderdigin kodlardan, giris.php ve guvenlik.php asagidaki gibi olacak

duzeltemelr sunlar,
giris.phpde, sadece session_register("msql_sifre"); demek yetmez,
session_register("msql_sifre");
$_SESSION['msql_sifre']=$msql_sifre;
hatta 2. satır olduktan sonra, ilk satır olmayabilir.

guvenlik.phpde de,
$tablo = "SELECT * FROM sifre WHERE sifre='".$_SESSION['msql_sifre']."'";
olacak. SESSION icine, tırnaklı yazmalısın. ona tırnak yazınca da, nokta ile birlestirmek gerekiyor.

ayrıca, guvenlikde her seferinde dbye baglanmana gerek yok.
sadece session ile control edebilirsin...




giris.php:

<?php
session_start();
$kullanici=$_POST["kullanici"];
$sifre=$_POST["sifre"];

mysql_connect("localhost", "root") or die("baglanamadim...");
mysql_select_db("ercan") or die("seçemedim");

$tablo="SELECT * FROM sifre WHERE kullanici='$kullanici' and sifre='$sifre'";

$sorgu=mysql_query($tablo);

if(mysql_num_rows($sorgu)<1){

echo "kullanıcı Adınız Veya şifreniz Yanlış";

}else{

$msql_sifre=@mysql_result($sorgu,0,"sifre");

$no=@mysql_result($sorgu,0,"no");
$ad=@mysql_result($sorgu,0,"ad");
$soyad=@mysql_result($sorgu,0,"soyad");

session_register("msql_sifre");
$_SESSION['msql_sifre']=$msql_sifre;

echo"Hoşgeldiniz: $ad $soyad";
include "alt.inc";
}


?>



guvenlik.php:

<? ob_start(); ?>

<?
session_start();
mysql_connect("localhost","root") || die ("Hata 1");
mysql_select_db("ercan") || die ("Hata 2");

echo $_SESSION[msql_sifre];

$tablo = "SELECT * FROM sifre WHERE sifre='".$_SESSION['msql_sifre']."'";

$sorgu = mysql_query($tablo);
$sifre = @mysql_result($sorgu,0,"sifre");
if ( mysql_num_rows($sorgu) < 1 ) {
header ("Location: sifre_hatasi.php");
}
?>
Ara
Cevapla


Hızlı Menü:


Şu anda bu konuyu okuyanlar: 1 Ziyaretçi


10tl.net Destek Forumu -

Online Shopping App
Online Shopping - E-Commerce Platform
Online Shopping - E-Commerce Platform
Feinunze Schmuck Jewelery Online Shopping