Jquery Ajax metodu ve Php Session sorunu...

Kodla Büyü

yazilimuzmani

Site Gezgini
Mesajlar
60
Arkadaşlar jquery nin ajax metodu ile ajax.php sayfasına değerler gönderiyorum ve bu değerleri ajax.php sayfasında sessionlara atıyorum fakat sayfayı yenileyince sessionlar kayboluyor sayfayı yenileyince sessionların kaybolmaması için ne yapmam lazım?
 
Sayın hocam,
Kodlarınızı görmeden bir çözüm yazmak mümkün değil.
Session değişkenlerinizi, sayfa yenilendiğinde yeniden tanımlıyor olmayasanız. Değişkenleri tanımlarken, önceden tanımlanmış mı kontrol ederseniz ve tabi ki kodlarınızın başına session_start komutunu eklemeyi unutmazsanız iyi olur.
 
Hocam Ajax kodum(anasayfa.php sayfası);

Kod:
$('#kullaniciGirisYap').click(function()
{
  $.ajax({
				url:'ajax.php',
				type:'POST',
				data: 'kullaniciGiris=evet&txtKullaniciGirisEmail='+$('input[name=txtKullaniciGirisEmail]').val()+'&txtKullaniciGirisSifre='+$('input[name=txtKullaniciGirisSifre]').val(),
				success: function(sonuc)
				{
					sonuc = $.trim(sonuc);
					if(sonuc=='basarili')
					{
						$('#dvKullaniciGiris').html('Hoşgeldin, <INPUT type="submit" id="guvenliCikis" value="Güvenli Çıkış" />');
					}
					else
					{
						alert(sonuc);
					}
					
				}
			});
});

Buda ajax.php sayfası kodu;

Kod:
if($_POST)
	{
		require_once('fonksiyonlar.php');
		
		if(@$_POST['kullaniciGiris']=='evet')
		{
			$email = trim($_POST['txtKullaniciGirisEmail']);
			$sifre = $_POST['txtKullaniciGirisSifre'];
			if(!empty($email) and !empty($sifre) and filter_var($email, FILTER_VALIDATE_EMAIL) and !sql_injection_durumu($email) and !sql_injection_durumu($sifre))
			{
				mysql_baglan($cnn);
				$query = mysql_query("SELECT * FROM uyeler WHERE Email='".$email."' and Sifre='".$sifre."';",$cnn);
				if($query)
				{
					if(mysql_num_rows($query)>0)
					{
						$result = mysql_fetch_assoc($query);
						uye_bilgilerini_ekle($result);
						echo 'basarili';
					}
					else
					{
						echo 'Lütfen girdiğiniz bilgileri kontrol edin...';
					}
					mysql_close($cnn);
				}
				else
				{
					echo 'Sistemimiz şuan yapım aşamasındadır lütfen daha sonra tekrar deneyin...';
				}
			}
			else
			{
				echo 'Lütfen girdiğiniz bilgileri kontrol edin...';
			}
		}
	}
	
	if(@$_POST['kullaniciCikis']=='evet')
	{
		uye_bilgilerini_sil();
	}

Buda fonksiyonlar.php'deki fonksiyonun kodu;
Kod:
function mysql_baglan(&$cnn)
	{
		$db_host = 'localhost';
		$db_name = 'matematikegitim';
		$db_user = 'root';
		$db_password = '';

		$cnn = mysql_connect($db_host,$db_user,$db_password);
		
		mysql_select_db($db_name,$cnn);
		mysql_query('SET NAMES utf8');
	}

function uye_bilgilerini_ekle($dizi)
	{
		if(@$_SESSION['uye_Girdi'] != 1)
		{
			$_SESSION['uye_Girdi'] = 1;
			$_SESSION['uye_ID'] = $dizi['ID'];
			$_SESSION['uye_Yetki'] = $dizi['Yetki'];
			$_SESSION['uye_Email'] = $dizi['Email'];
			$_SESSION['uye_Sifre'] = $dizi['Sifre'];
			$_SESSION['uye_Ad'] = $dizi['Ad'];
			$_SESSION['uye_Soyad'] = $dizi['Soyad'];
			$_SESSION['uye_Cinsiyet'] = $dizi['Cinsiyet'];
			$_SESSION['uye_Il'] = $dizi['Il'];
			$_SESSION['uye_Telefon'] = $dizi['Telefon'];
			$_SESSION['uye_DogumTarihi'] = $dizi['DogumTarihi'];
		}
	}
	
	function uye_bilgilerini_sil()
	{
		if(@$_SESSION['uye_Girdi'] == 1)
		{
			session_unset($_SESSION['uye_Girdi']);
			session_unset($_SESSION['uye_ID']);
			session_unset($_SESSION['uye_Yetki']);
			session_unset($_SESSION['uye_Email']);
			session_unset($_SESSION['uye_Sifre']);
			session_unset($_SESSION['uye_Ad']);
			session_unset($_SESSION['uye_Soyad']);
			session_unset($_SESSION['uye_Cinsiyet']);
			session_unset($_SESSION['uye_Il']);
			session_unset($_SESSION['uye_Telefon']);
			session_unset($_SESSION['uye_DogumTarihi']);
		}
	}
 
formdan gönderilen verileri serialize() fonksiyonu ile gönderirsen o kadar uzun data satırı yazmana gerek kalmaz.
datatype satırı ekleyip json yöntemini kullan. php de json encode decode ile verileri çekersin.

click metodu yerine submit metodunu kullanabilirsin.
 
Hocam işte sorun burada başlıyor zaten ben buraya yazmadım fakat, anasayfa.php 'nin en başında session_start() komutu var zaten. Ayrıca fikir ve deneyimlerini paylaşan hocalarıma da teşekkür ederim.
 
Sayın hocam,
session_start'ın anasayfa.php'de yer alması yetmez, ajax.php sayfasının başında da yer almalı.
Çünkü siz ajax.php'yi anasayfa.php'den bağımsız olarak sanki, adres satırına dosyanın adresini yazarak çalıştırmışsınız gibi olmaktadır. Yani ajax.php, anasayfa.php'den bağımsız olarak çalıştırıldığından session_start ajax.php'de de olmalı.
 
Sorunun hallolduğuna sevindim. Yalnız gerek ajax ile gerekse de başka yollarla veritabanında işlem yapmadan önce gelen bilgilerin, sitenin kendisinden geldiğini tespit etmek için, her bilgi gönderdiğinizde, beraberinde rastgele oluşturduğunuz bir bilgiyi de gönderin. Tabi bu bilgiyi öncesinde bir session değişkenine aktarıp, bilgiyi gönderdiğiniz sayfada da bunu kontrol ettirin. Aksi halde saldırgan kendi bilgisayarında oluşturduğu bir program ile sizin bilgi gönderdiğiniz sayfaya binlerce kez veri gönderip, sitenizi çökertmeye çalışabilir ya da örneğin size bir link tıklatarak siteniz üzerinde işlem yaptırabilir.
 
Hocam konuya biraz açıklık getirir misin?(Örnek verir misin?) Veri iletişiminde, veri güvenliğine önem veriyorum senden almamız gereken çok ders var hocam.
 
ob_start();
session_start();

şeklinde her sayfada kullanılabilir diye biliyorum. böylelikle sıkıntı oluşturmazlar. bu kadar üstad var soralım öğrenelim, varsa yanlışımız düzeltelim... :)
 
yazilimuzmani' Alıntı:
Hocam konuya biraz açıklık getirir misin?(Örnek verir misin?) Veri iletişiminde, veri güvenliğine önem veriyorum senden almamız gereken çok ders var hocam.
@yakuphan hocanın dediği durum XSS koruma ve formlar içinde CSRF koruma olarak geçer. nette arattırıp örnek uyuglamalar bulabilirsin. Çapraz site saldırını önlemek ve formun başka siteler tarafından kullanımı önlemek için kullanılır.
 
BBNET
Geri
Üst