Açığı Kapatamıyorum
-
Yaptığım bir sistemde twitter üzerinden giriş yapılıyor ve site içinde mesajlaşma sistemi yaptım, bir yandan yaparken bir yandan da zafiyet var mı açık var mı diye bakıyorum, bugün farkına vardım ki iki farklı browserda ayrı ayrı kullanıcı açınca, id değiştirdiğim takdirde gönderilen,alınan mesajlar gözüküyor, çözümünü bulamadım henüz nasıl yapacağımı, giriş yapılmadan özel alanların hiçbiri açılmıyor fakat dediğim gibi iki kullanıcı giriş yapınca gözüküyor, aşağıda kodları paylaştım, aslına kodun çalıştığı yerde gelen id ile session id sini karşılaştırıp basmayı denedim ama çalışmadı.
<!-- Received Pm-->
<div id="main">
<div id="content">
<div class="content-box">
<div class="box-t"> </div>
<div class="box-c">
<div class="box-holder">
<div id="padingtop"></div>
<div class="post-26 coupon type-coupon status-publish hentry item">
<div class="item-holder">
<div class="item-frame">
<?php
session_start();
require("baglan.php");
$id=$_GET['id'];
$degisken = $_SESSION['id'];
if(!empty($degisken))
{
echo "<table cellspacing=\"1\" class=\"uzerinde\" id=\"golKrallari\" width=\"59%\" summary=\"PM\">";
echo "<thead>";
echo " <tr>\n";
echo " <th scope=\"col\" abbr=\"adsoyad\" width=\"25\"><b>Sıra No</b></th>\n";
echo " <th scope=\"col\" abbr=\"adsoyad\" width=\"190\"><b>Teklif Veren Kişi</b></th>\n";
echo " <th scope=\"col\" abbr=\"adsoyad\"width=\"115\"><b>Tarih / Saat</b></th>\n";
echo " <th scope=\"col\" abbr=\"adsoyad\" colspan=\"2\" >";
echo " <p align=\"center\"><b>İslemler</b></th>\n";
echo " </tr>\n";
echo " </thead>";
$sor = mysql_query("select * from ozelmesaj where alanid='$id' order by pmno desc limit 20");
$satir = 1;
while ($pmal = mysql_fetch_array($sor)) {
$veren=$pmal['teklifveren'];
$zaman=$pmal['zaman'];
$idno=$pmal['idsi'];
$pmno=$pmal['pmno'];
$okundu=$pmal['okundu'];
echo "<tbody>";
echo " <tr>\n";
echo " <th scope=\"row\" abbr=\"03-04\" class=\"baslikBir\" width=\"25\">$satir</th>";
echo " <th scope=\"row\" abbr=\"03-04\" class=\"baslikBir\"><a href=\"index.php?icerik=profil&id=$idno\">$veren</a></th>\n";
echo " <td class=\"tabloZRFark\">$zaman</td>\n";
echo " <td class=\"tabloZRFark\">";
echo " <p align=\"center\"><a href=\"index.php?icerik=readpm&id=$pmno\">";
if($okundu >0)
{
echo "Okunmadı";
}
else
{
echo "Okundu";
}
echo"</a></td>";
echo " <td class=\"tabloZRFark\">";
echo " <p align=\"center\"><a href=\"index.php?icerik=delete&id=$pmno\">Sil</a></td>\n";
echo " </tr>\n";
echo "</tbody>";
$satir++;
}
echo "</table>\n";
echo "\n";
}
else
{
echo " <center><a class=\"fancybox fancybox.iframe\" href=\"login/index.php\"><img src=\"images/Login.png\" width=\"101\" height=\"100\"></a></center>";
}
?>
<div class="clear"></div>
</div>
<div class="item-footer-bottom"></div>
</div>
</div>
</div>
<div class="top"><a href="#">Top ↑</a></div>
</div>
<div class="box-b"> </div>
</div>
</div>
<!-- Received Pm-->
şu şekilde denedim yine çalışmadı acaba bu şekilde çalışmama sebebi nedir.
PHP- Kodu:
session_start();
require("baglan.php");
$id=$_GET['id'];
$degisken = $_SESSION['id'];
if($degisken==$id)
{ -
id yi nereden alıyorsun ?
ilk önce twittersiz olarak benim çözümümü söyleyeyim..
bir kullanıcılar tablon olsun.
bunun içinde
kullanıcı adı - şifre - id
alanları olsun.
normal loginde girilen kullanıcı adı ile şifre tablodakiler ile eşit ise login oluyorsun,
login olduğu zaman tablodan kullanıcı id yi de al...
bu id yi sessiyon a at.
yani id = $_GET (id) kullanma...
-
her gelen id yi değişkene atarsan ohoo
-
değişkenle id birbirine eşit olamaz ki bu döngüde
alttaki kodun çalışmama sebebi bu olabilir tahminimce
ilk kod için ise her kullanıcı aktif olduğunda değişkeni 1 arttırmak veya 1 azaltmak mesajların çekilmesine çözüm olabilir.
anladığım kadarıyla bu kadar oluyor hocam. umarım yardımım dokunmuştur.
if($degisken==$id) -
Normal sistemle giriş olsa yani kullanıcı adı giriş o sistemde sıkıntı yok, ama yaptığım projede sadece twitter üzerinden giriş yapılması gerekiyor, yani problemi tam olarak anlatamadığım düşünüyorum, id yi veritabanında giriş yapıldığında profil kısmından alarak apm&id=875607949 şeklinde gelen mesajlarda get ile alıyorum.
şimdi ben chrome da giriş yaptım gelen mesajları açtım,, tabii burda gelen mesajlarda id ye göre getiriyorum veritabanından, örnek id 875607949 sonra başka browserde mesela internet explorerda başka kullanıcı ile oturum açıyorum ve yine gelen mesajları açıyorum onun idsi de 562542154 olsun, 875607949 yerine diğer browserdaki 562542154 yı yazınca ilk açtığım kullanıcıya ait gelen mesajlar,giden mesajlar gözüküyor, ama bir üçüncü farklı browserda giriş yapılmadan deneyince sorun yok, login ekranı geliyor.
TheMayk tarafından 12/Nis/13 16:56 tarihinde düzenlenmiştir
-
$_session['id'] degiskeni nereden geliyor?
$sor = mysql_query("select * from ozelmesaj where alanid='$id' order by pmno desc limit 20");
$satir = 1;yerine
$sor = mysql_query("select * from ozelmesaj where alanid='$_SESSION['id']' order by pmno desc limit 20");
$satir = 1;yap.
sniperscope tarafından 12/Nis/13 17:15 tarihinde düzenlenmiştir -
sniperscope bunu yazdı
$_session['id'] degiskeni nereden geliyor?
$sor = mysql_query("select * from ozelmesaj where alanid='$id' order by pmno desc limit 20");
$satir = 1;yerine
$sor = mysql_query("select * from ozelmesaj where alanid='$_SESSION['id']' order by pmno desc limit 20");
$satir = 1;yap.
Teşekkürler, sanırım sizin dediğiniz gibi yaptım, problem çözüldü sanırım, diğer mesajlaşmayla ilgili sayfalarada uygulayınca tekrar buradan durumu yazacağım, ben şu şekilde yaptım, ve ayrıca get ile id almayıda iptal etmiş oldum.
<?php
session_start();
ob_start();
require("baglan.php");
$sorgu = mysql_query("SELECT * FROM users WHERE nickurl='{$_SESSION['nickurl']}'");
$al=mysql_fetch_array($sorgu);
$yazanpm=$al['oauth_uid'];
if(!empty($yazanpm))
{
$sor = mysql_query("select * from ozelmesaj where alanid='$yazanpm' order by pmno desc limit 20");
$satir = 1;
TheMayk tarafından 12/Nis/13 18:04 tarihinde düzenlenmiştir -
Sorunun cozulmesine sevindim fakat nerede hata yaptigini gorebildinmi?
