• 22-03-2015, 22:37:49
    #1
    Üyeliği durduruldu
    Merhaba arkadaşlar bir projemde giriş sistemi yaptık. Mysql ile veritabanı ile üyeleri kayıt ettirip key sistemi ile giriş yapma kontrolü yapıyoruz ama 1 kullanıcı ile sınırsız giriş imkanı var biz bunu 1 kişi giriş yaptığında çıkış yapmadan başka bir bilgisayar tarafından giriş yapılmasını engellemek istiyoruz yardımcı olabilirseniz sevinirim.

    giriş kontrol php dosyamız;
    <?
    include ("db_baglan.php");
    session_start();
    $kullaniciadi = $_GET[kadi];
    $parola       = md5($_GET[pass]);
    
    if ((!$kullaniciadi =="") and (!$parola =="")) {
    
    $sql = "select * from uyeler where kulladi='$kullaniciadi' and parola='$parola'";
    $kontrol = mysql_query($sql);
    $kayitsayisi = mysql_num_rows($kontrol);
    if ip !=null && getenv("REMOTE_ADDR") == ip
    giriş başarılı
    else
    hesapta biri var
    if ($kayitsayisi == "0") {
           echo "<meta http-equiv='Refresh' content='0; URL=uye_yok.php'>";
    } else {
      $kontrol_ok = mysql_fetch_array($kontrol);
      setcookie ("kulladi", "$kontrol_ok[kulladi]",time()+24*60*60);
                  echo "<meta http-equiv='Refresh' content='0; URL=uye_paneli.php'>";
           }
     
    }
      else {
           echo "<meta http-equiv='Refresh' content='0; URL=uye_yok.php'>";
           }
    
    
    ?>
    Giriş fonksiyonumuz;

    <form action="giris_kontrol.php" method="POST">
    <div align="center">
    	<table border="1" id="table1" bordercolordark="#C4EC02" bordercolorlight="#FFFFFF" cellspacing="0" cellpadding="0" style="border-collapse: collapse">
    		<tr>
    			<td><div align="center">
    	<table border="0" width="250" id="table2" cellpadding="0" style="border-collapse: collapse">
    		<tr>
    			<td height="20" background="imgeler/yesil_cubuk.gif" colspan="4"><b>
    			<font size="1" face="Tahoma">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Üye Girişi</font></b></td>
    		</tr>
    		<tr>
    			<td height="20" colspan="4">&nbsp;</td>
    		</tr>
    		<tr>
    			<td height="20" width="16">&nbsp;</td>
    			<td height="20" width="71" align="right">
    			<font size="1" face="Tahoma">Kullanıcı Adınız</font></td>
    			<td height="20" width="6" align="center">&nbsp;</td>
    			<td height="20" width="157"><input type="text" name="kadi" style="font-size: 8pt; font-family: Tahoma; color: #000000; border: 1px dotted #CCCCCC; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #C4EC02" size="20"></td>
    		</tr>
    		<tr>
    			<td height="20" width="16">&nbsp;</td>
    			<td height="20" width="71" align="right">
    			<font size="1" face="Tahoma">Parolanız</font></td>
    			<td height="20" width="6" align="center">&nbsp;</td>
    			<td height="20" width="157"><input type="password" name="pass" style="font-size: 8pt; font-family: Tahoma; color: #000000; border: 1px dotted #CCCCCC; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #C4EC02" size="20"></td>
    		</tr>
    		<tr>
    			<td height="20" width="16">&nbsp;</td>
    			<td height="20" width="71">&nbsp;</td>
    			<td height="20" width="6">&nbsp;</td>
    			<td height="20" width="157">
    			<input type="image" src="imgeler/giris.gif" value="Giriş" style="font-size: 8pt; font-family: Tahoma; color: #000000; border: 1px dotted #C0C0C0; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #C6EE01" name="I1"></td>
    		</tr>
    	</table>
    </div></td>
    		</tr>
    	</table>
    </div>
    </form>
    mysql eklediğimiz tablolar;

    DROP TABLE IF EXISTS `sn`;
    CREATE TABLE `sn` (
      `no` int(11) NOT NULL AUTO_INCREMENT,
      `serial` varchar(100) NOT NULL,
      `onay` varchar(2) NOT NULL,
      `gun` varchar(3) NOT NULL,
      `kullanan` varchar(100) NOT NULL,
      PRIMARY KEY (`no`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    
    
    
    
    DROP TABLE IF EXISTS `uyeler`;
    CREATE TABLE `uyeler` (
      `uyeno` int(11) NOT NULL AUTO_INCREMENT,
      `kulladi` varchar(100) NOT NULL,
      `parola` varchar(32) NOT NULL,
      `sifre` varchar(32) NOT NULL,
      `email` varchar(100) NOT NULL,
      `tarih` varchar(60) NOT NULL,
      `onay` varchar(2) NOT NULL,
      `gun` varchar(3) NOT NULL DEFAULT '3',
      PRIMARY KEY (`uyeno`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
  • 22-03-2015, 23:30:14
    #2
    Bu durum kullanıcının online olup olmamasının kontrolü ile alakalıdır.
    Bununla alakalı burada biraz tartışılmış.

    Bir tabloda kullanıcıların online olup olmadığını tutarsın eğer online ise o kullanıcı adı ile giriş yapılmaz ama burada asıl önemli olan ise kullanıcının offline olmasını nasıl anlayacaksın
    Bunun için yukarıda verdiğim linkte online olduğu sürece sayfada jQuery ile veri yollayıp online oluyor.

    Diğer bir kişi ise cronjobs ile belirli aralıklarla 5-10 dk boyunca online verisi yollamamış kişiler tabloda offline yapmak ya da tablodan silmek olur.
  • 22-03-2015, 23:56:14
    #3
    Üyeliği durduruldu
    pSkpt adlı üyeden alıntı: mesajı görüntüle
    Bu durum kullanıcının online olup olmamasının kontrolü ile alakalıdır.
    Bununla alakalı burada biraz tartışılmış.

    Bir tabloda kullanıcıların online olup olmadığını tutarsın eğer online ise o kullanıcı adı ile giriş yapılmaz ama burada asıl önemli olan ise kullanıcının offline olmasını nasıl anlayacaksın
    Bunun için yukarıda verdiğim linkte online olduğu sürece sayfada jQuery ile veri yollayıp online oluyor.

    Diğer bir kişi ise cronjobs ile belirli aralıklarla 5-10 dk boyunca online verisi yollamamış kişiler tabloda offline yapmak ya da tablodan silmek olur.

    php ve mysql kabiliyetim hiç olmadığını belirtmek isterim üzülerek, bu sisteme geçme nedenimiz hazır script kullanmamızdır. Başkada alternatifi yoktu. bu konuda özel olarak yardımcı olabilir misiniz ?
  • 23-03-2015, 00:08:12
    #4
    Bu hafta içi biraz sıkıntılı olur ama haftasonu yardımcı olmaya çalışırım.
  • 23-03-2015, 05:32:13
    #5
    Üyeliği durduruldu
    Arkadaşında dediği gibi kullanıcı giriş yaptığı zaman db de online tablosunu 1 yapıp çıkış yapıtğında 0 yapabilirsin veya SESSİON tutup 30 dk sonra çıkış yaptırdığında 0 layabilirsin.
  • 23-03-2015, 09:04:23
    #6
    Ters mantık bazen daha çok işe yarar Online durumunu sorgulamak yerine , offline ise girişe izin vermek daha sağlıklı olur. genel geçer bir sayfayada jquery ile 10 saniyede bir online durumunu güncelleyecek komut yazarsınız yeterli olur...
  • 23-03-2015, 10:35:58
    #7
    Bunu form sorgulatacagın sayfaya koy. Eğer giriş bilgileri doğruysa anasayfa.php isimli kısıma yonlendirecek.

    // Üye Giriş Sayfası Form Kontrolü.
    $kullanici = $_POST['kadi'];
    $sifre = $_POST['pass'];
    if(empty($kullanici) || empty($sifre)) {
    	echo 'Kullanıcı adı ve ya şifrenizi girmediniz.';
    } else {
    	$sifre = md5($sifre);
    	$baglan = mysql_query("select id,durum from uyeler where kulladi='$kullanici' and parola='$sifre'");
    	if(mysql_num_rows($baglan)<1) {
    		echo 'Girdiğiniz bilgilere ait kullanıcı bulunamadı.';
    	} else {
    		$bilgiler = mysql_fetch_assoc($baglan);
    		$uyeid = $bilgiler['id']; 
    		if($bilgiler['durum']==1) {
    			echo 'Bu kullanıcı şuan başka bir oturumda online görünüyor. Giriş yapamazsınız.';
    			/*
    			Karşıdaki oturumu sonlandırmak için mail yada sms ile şifre gonderilip kullanıcının bunu girmesi
    			istenebilir. Şifre belirli bir süre içinde girilirse diğer kişi offline olur.
    			*/
    		} else {
    		$otguncelle = mysql_query("update uyeler set oturum='$sessionid' , durum='1', zaman='$offlinezamani' where id='$uyeid'");
    		$_SESSION['uyeid'] = $uyeid;
    		Header("Location:anasayfa.php");
    		exit();
    		}

    Bu yazacagım fonksiyonu da db_baglan.php sayfasında en alta koy.

    // Üye kontrol fonksiyonu
    function uyekontrol($uyeid) {
    	if(empty($uyeid)) {
    		Header('Location:giris.php');
    		exit();
    	} else {
    		$sessionid = session_id();
    		$zaman = time();
    		$dakika = 5; // Kaç dakika sonra otomatik offline olsun?
    		$pasif = $dakika*60;
    		$offlinezamani = $zaman+$pasif;	
    		$sor = mysql_query("select id from uyelere where sessionid='$sessionid' and id='$uyeid' and durum='1' and zaman>='$offlinezamani'");
    		if(mysql_num_rows($sor)<1) {
    			echo '<script>alert("Uzun süre hareketsiz kaldığınız için oturumunuz sonlandırılmıştır.Lütfen tekrar giriş yapınız.");</script>';
    			$offlineyap = mysql_query("update uyeler set durum='0' , zaman='0' where id='$uyeid'");
    		} else {
    			$otguncelle = mysql_query("update uyeler set zaman='$offlinezamani' where id='$uyeid' and sessionid='$sessionid'");
    		}
    		
    	
    	}
    	
    }
    Şimdi paneldeki butun sayfalarda include ettiğin db_baglan.php satırının altında şunları yaz.

    $uyeidi = $_SESSION['uyeid'];
    uyekontrol($uyeidi);

    İşyerindeyim local server olmadıgı için denemeyedim ama %99 calısacaktır.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 10:35:58 -->-> Daha önceki mesaj 10:25:04 --

    Bunda tek sıkıntı çıkış yap filan demeden cıkan kullanıcıdan dolayı bir daha ki girişte online gorunuyor olma ihtimali. Bu yuzden şu Email yada SMS ile oturum sonlandırma olayı eklenmeli bence. Şuan için aklıma gelen fikir bu. Geliştirebilirsin.
  • 23-03-2015, 14:03:28
    #8
    Üyeliği durduruldu
    Yebats adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar bir projemde giriş sistemi yaptık. Mysql ile veritabanı ile üyeleri kayıt ettirip key sistemi ile giriş yapma kontrolü yapıyoruz ama 1 kullanıcı ile sınırsız giriş imkanı var biz bunu 1 kişi giriş yaptığında çıkış yapmadan başka bir bilgisayar tarafından giriş yapılmasını engellemek istiyoruz yardımcı olabilirseniz sevinirim.

    giriş kontrol php dosyamız;
    <?
    include ("db_baglan.php");
    session_start();
    $kullaniciadi = $_GET[kadi];
    $parola       = md5($_GET[pass]);
    
    if ((!$kullaniciadi =="") and (!$parola =="")) {
    
    $sql = "select * from uyeler where kulladi='$kullaniciadi' and parola='$parola'";
    $kontrol = mysql_query($sql);
    $kayitsayisi = mysql_num_rows($kontrol);
    if ip !=null && getenv("REMOTE_ADDR") == ip
    giriş başarılı
    else
    hesapta biri var
    if ($kayitsayisi == "0") {
           echo "<meta http-equiv='Refresh' content='0; URL=uye_yok.php'>";
    } else {
      $kontrol_ok = mysql_fetch_array($kontrol);
      setcookie ("kulladi", "$kontrol_ok[kulladi]",time()+24*60*60);
                  echo "<meta http-equiv='Refresh' content='0; URL=uye_paneli.php'>";
           }
     
    }
      else {
           echo "<meta http-equiv='Refresh' content='0; URL=uye_yok.php'>";
           }
    
    
    ?>
    Giriş fonksiyonumuz;

    <form action="giris_kontrol.php" method="POST">
    <div align="center">
    	<table border="1" id="table1" bordercolordark="#C4EC02" bordercolorlight="#FFFFFF" cellspacing="0" cellpadding="0" style="border-collapse: collapse">
    		<tr>
    			<td><div align="center">
    	<table border="0" width="250" id="table2" cellpadding="0" style="border-collapse: collapse">
    		<tr>
    			<td height="20" background="imgeler/yesil_cubuk.gif" colspan="4"><b>
    			<font size="1" face="Tahoma">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Üye Girişi</font></b></td>
    		</tr>
    		<tr>
    			<td height="20" colspan="4">&nbsp;</td>
    		</tr>
    		<tr>
    			<td height="20" width="16">&nbsp;</td>
    			<td height="20" width="71" align="right">
    			<font size="1" face="Tahoma">Kullanıcı Adınız</font></td>
    			<td height="20" width="6" align="center">&nbsp;</td>
    			<td height="20" width="157"><input type="text" name="kadi" style="font-size: 8pt; font-family: Tahoma; color: #000000; border: 1px dotted #CCCCCC; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #C4EC02" size="20"></td>
    		</tr>
    		<tr>
    			<td height="20" width="16">&nbsp;</td>
    			<td height="20" width="71" align="right">
    			<font size="1" face="Tahoma">Parolanız</font></td>
    			<td height="20" width="6" align="center">&nbsp;</td>
    			<td height="20" width="157"><input type="password" name="pass" style="font-size: 8pt; font-family: Tahoma; color: #000000; border: 1px dotted #CCCCCC; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #C4EC02" size="20"></td>
    		</tr>
    		<tr>
    			<td height="20" width="16">&nbsp;</td>
    			<td height="20" width="71">&nbsp;</td>
    			<td height="20" width="6">&nbsp;</td>
    			<td height="20" width="157">
    			<input type="image" src="imgeler/giris.gif" value="Giriş" style="font-size: 8pt; font-family: Tahoma; color: #000000; border: 1px dotted #C0C0C0; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #C6EE01" name="I1"></td>
    		</tr>
    	</table>
    </div></td>
    		</tr>
    	</table>
    </div>
    </form>
    mysql eklediğimiz tablolar;

    DROP TABLE IF EXISTS `sn`;
    CREATE TABLE `sn` (
      `no` int(11) NOT NULL AUTO_INCREMENT,
      `serial` varchar(100) NOT NULL,
      `onay` varchar(2) NOT NULL,
      `gun` varchar(3) NOT NULL,
      `kullanan` varchar(100) NOT NULL,
      PRIMARY KEY (`no`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    
    
    
    
    DROP TABLE IF EXISTS `uyeler`;
    CREATE TABLE `uyeler` (
      `uyeno` int(11) NOT NULL AUTO_INCREMENT,
      `kulladi` varchar(100) NOT NULL,
      `parola` varchar(32) NOT NULL,
      `sifre` varchar(32) NOT NULL,
      `email` varchar(100) NOT NULL,
      `tarih` varchar(60) NOT NULL,
      `onay` varchar(2) NOT NULL,
      `gun` varchar(3) NOT NULL DEFAULT '3',
      PRIMARY KEY (`uyeno`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
    Erturk adlı üyeden alıntı: mesajı görüntüle
    Bunu form sorgulatacagın sayfaya koy. Eğer giriş bilgileri doğruysa anasayfa.php isimli kısıma yonlendirecek.

    // Üye Giriş Sayfası Form Kontrolü.
    $kullanici = $_POST['kadi'];
    $sifre = $_POST['pass'];
    if(empty($kullanici) || empty($sifre)) {
    	echo 'Kullanıcı adı ve ya şifrenizi girmediniz.';
    } else {
    	$sifre = md5($sifre);
    	$baglan = mysql_query("select id,durum from uyeler where kulladi='$kullanici' and parola='$sifre'");
    	if(mysql_num_rows($baglan)<1) {
    		echo 'Girdiğiniz bilgilere ait kullanıcı bulunamadı.';
    	} else {
    		$bilgiler = mysql_fetch_assoc($baglan);
    		$uyeid = $bilgiler['id']; 
    		if($bilgiler['durum']==1) {
    			echo 'Bu kullanıcı şuan başka bir oturumda online görünüyor. Giriş yapamazsınız.';
    			/*
    			Karşıdaki oturumu sonlandırmak için mail yada sms ile şifre gonderilip kullanıcının bunu girmesi
    			istenebilir. Şifre belirli bir süre içinde girilirse diğer kişi offline olur.
    			*/
    		} else {
    		$otguncelle = mysql_query("update uyeler set oturum='$sessionid' , durum='1', zaman='$offlinezamani' where id='$uyeid'");
    		$_SESSION['uyeid'] = $uyeid;
    		Header("Location:anasayfa.php");
    		exit();
    		}

    Bu yazacagım fonksiyonu da db_baglan.php sayfasında en alta koy.

    // Üye kontrol fonksiyonu
    function uyekontrol($uyeid) {
    	if(empty($uyeid)) {
    		Header('Location:giris.php');
    		exit();
    	} else {
    		$sessionid = session_id();
    		$zaman = time();
    		$dakika = 5; // Kaç dakika sonra otomatik offline olsun?
    		$pasif = $dakika*60;
    		$offlinezamani = $zaman+$pasif;	
    		$sor = mysql_query("select id from uyelere where sessionid='$sessionid' and id='$uyeid' and durum='1' and zaman>='$offlinezamani'");
    		if(mysql_num_rows($sor)<1) {
    			echo '<script>alert("Uzun süre hareketsiz kaldığınız için oturumunuz sonlandırılmıştır.Lütfen tekrar giriş yapınız.");</script>';
    			$offlineyap = mysql_query("update uyeler set durum='0' , zaman='0' where id='$uyeid'");
    		} else {
    			$otguncelle = mysql_query("update uyeler set zaman='$offlinezamani' where id='$uyeid' and sessionid='$sessionid'");
    		}
    		
    	
    	}
    	
    }
    Şimdi paneldeki butun sayfalarda include ettiğin db_baglan.php satırının altında şunları yaz.

    $uyeidi = $_SESSION['uyeid'];
    uyekontrol($uyeidi);

    İşyerindeyim local server olmadıgı için denemeyedim ama %99 calısacaktır.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 10:35:58 -->-> Daha önceki mesaj 10:25:04 --

    Bunda tek sıkıntı çıkış yap filan demeden cıkan kullanıcıdan dolayı bir daha ki girişte online gorunuyor olma ihtimali. Bu yuzden şu Email yada SMS ile oturum sonlandırma olayı eklenmeli bence. Şuan için aklıma gelen fikir bu. Geliştirebilirsin.



    Aklıma çok daha basit bir fikir geldi. Algoritması şöyle :

    Üyeler tablosuna giris sütunu ekle.

    Üye giriş yaptığında o üyenin giris sütununa 1 yazdır.

    Giriş yapma sayfasında giriş yapacak kullanıcının giris sutununu sorgula. 1 ise bu kullanıcı şuan online siz giriş yapamassınız yazdır.

    Çıkış yapma sayfasında ise çıkış yaptırırken sessionu sonlandırırken o kullanıcıya ait giris sütununu 0 yazdır.

    İşte bu kadar basit.
  • 23-03-2015, 14:06:12
    #9
    Bende o sistemi yazmıştım zaten dostum.