_SESSION Problemi
localde çalışan login metodum server tarafında kısmen çalışmıyor. Nasıl derseniz!. admin klasörü altındaki login tarafında sorun yok.
ama rootta normal kullanıcıların login olduğu yerde loginkontrol dosyamda da her şey yolunda. KOntrol ediyor sessionlaro oluşturuyor. print_r($_SESSION) ile bastırıp görüyorum. Buradan sonra başarılı login olunca geldiği sayfaya yönlendiriyorum. Orada loginkontrol de oluşturulan SESSIONlar yok oluyor. session oturumu başlamış durumda hatta geldiği sayfayı atadığım $_SESSION['ref'] bastırabiliyorum. Diğerleri yok ortada deli olucam.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (7)
sessionlar da çerezdir aslında sadece sunucu tarafında işleniyor olması farklı kılıyor, ini set ayarları aynı ama bu yüzden.
session_start('Email');
session_start('UserID');
session_start('UserType');
ob_start();
session_regenerate_id(); bu kullanım yanlış
session_start() oturum başlatacağın betiğin içerisinde oturumdan önce kullanılmalı ve her session için ayrı tanım yapılmamamalı
session_start('admin')
ob_start();
session_regenerate_id();
$_SESSION['email'] = $email;
... session startı resim ile atlatacak olursam şöyle göstereyim
v1_8 benim sessionlarım ve oturumların bütün değerleri burada saklanıyor
v1_8_lock bir dizi içerisinde kullanıcının temel giriş bilgilerini saklayan bir cookie oturum süresi dolduğunda giriş ekranı sadece şifre istiyor bu cookie sayesinde
@mutluol cevabın için ok teşekkür ederim.
çerez kullanmıyorum site. ayrıca admin klasörü altında loginkontrol dosyası birebir yazdığımla aynı :(
bu kontrol sayfası son ana kadar yani login başarılı olupta yönlendirdiği anda da session'dan kullanıcı tipini kontrol ediyor. Yani sorun kanatimce kontrol sayfasında değil.
session_start('Email');
session_start('UserID');
session_start('UserType');
ob_start();
session_regenerate_id();
bunlar da bir şeyi değiştirmedi :(
(Sunucumda Header(Location: ... çalışmıyor. Buda lokalde çalışıp sunucuda çalışmayan başka dertlerden biri ama en azında bunu bu tip bir çaresi var.)
LoginProcess koşulunu yaptığın sayfada ifadeleri kapatmayı unutmuşssun sanırım neyse ob_startı session_start dan sonra kullanırsan sorun çözülüecektir muhtemelen
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start('oturumadi');
ob_start();
session_regenerate_id();
include_once 'inc/conn.php';
if(!isset($_SESSION["oturum"])){
if (isset($_POST['LoginProcess'])){
$set_sorgu=$db->prepare("SELECT * from tbl_settings where ayar_id=:ayar_id");
$set_sorgu->execute(array( 'ayar_id' => 1 ));
$settings=$set_sorgu->fetch(PDO::FETCH_ASSOC); // normal işlemlerin
}
ob_end_flush();
}
- olay dediğinde de çerezleri güvenli bağlantı üzerinden gönderip siteyi http:// şeklinde kullanmaktan kaynaklı yaşanan bir durum direkt oturum sonlanır bu arada <script>localition</script> kullanımı yerine header() kullanırsan daha az kod yazmış aynı dili kullanmış olursun ufak bir öneri
not: verdiğim şeklinde oturum sayfasını kullanırsan, oturumun başlayacağın diğer sayfalarda session start içerisinde hangi oturumun başlayacağını belirtmelisin
@aydinkeskin senin yazdığını da denedim. Sonu değişmedi.
loginkontrol dosyamın içeriğide aşağıdaki gibi. (ki kontollere göre yönlenme anına kadar her şey düzügn çalışıyor) iş geldiğin yere dönünce bozuluyor.
ob_start();
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
include_once 'inc/conn.php';
$set_sorgu=$db->prepare("SELECT * from tbl_settings where ayar_id=:ayar_id");
$set_sorgu->execute(array( 'ayar_id' => 1 ));
$settings=$set_sorgu->fetch(PDO::FETCH_ASSOC);
if (isset($_POST['LoginProcess'])) {
$Email = $_POST["Email"];
$Pass = $_POST["Pass"];
$referans = $_POST["referans"];
$mailvarmi = $db->query("SELECT * from tbl_members WHERE Email = '$Email'");
if($mailvarmi->rowCount()){
$sifredogrumu = $db->query("SELECT * from tbl_members WHERE Email = '$Email' and Pass = '$Pass'");
if($sifredogrumu->rowCount()){
$memberaktifmi = $db->query("SELECT * from tbl_members WHERE Email = '$Email' and Pass = '$Pass' and Durum = 1");
if($memberaktifmi->rowCount()){
$member = $db->query("SELECT * FROM tbl_members WHERE Email = '$Email' and Pass = '$Pass'")->fetch(PDO::FETCH_ASSOC);
$_SESSION["Email"] = $member["Email"];
$_SESSION["UserID"] = $member["UserID"];
$_SESSION["AdSoyad"] = $member["AdSoyad"];
$_SESSION["Email"] = time() + 3600;
$_SESSION["UserID"] = time() + 3600;
$_SESSION["AdSoyad"] = time() + 3600;
// echo '<pre>';
// echo print_r($_SESSION);
// echo '</pre>';
// burdaki kontrolde SESSIONlar yerli yerinde
if ($member["UyeTipi"]==1) {
$_SESSION["UyeTipi"] = "Admin";
if(strstr($referans, "admin")) {
echo '<meta http-equiv="refresh" content="0;URL='.$referans.'">';
exit;
}
}
if ($member["UyeTipi"]==2) {
$_SESSION["UyeTipi"] = "Partner";
if(strstr($referans, "ortak")) {
echo '<meta http-equiv="refresh" content="0;URL='.$referans.'">';
exit;
}
}
if ($member["UyeTipi"]==3) {
$_SESSION["UyeTipi"] = "Member";
if(!strstr($referans, "ortak, admin")) {
echo '<meta http-equiv="refresh" content="0;URL='.$referans.'">';
exit;
}
}
bende merak ettim
destroy unset olmadan var olan session süresi çok kısa olmazki
session a süre verek denermisin
$_SESSION['HBRDzn'] = time() + 3600; gibi
- seçeneğine bişey diyemem ama 2. seçeneğine cevaben lokalde 10 numara çalışıyor kodlar diyebilirim.
session inlude dosyam
<?php
ob_start();
session_start();
require_once 'inc/conn.php';
$_SESSION['ref'] = $_SERVER['REQUEST_URI'];
if(!isset($_SESSION['Email'])){
if ((strpos($_SESSION['ref'], 'Sepetim.php')) or (strpos($_SESSION['ref'], 'TeslimatBilgileri.php')) or (strpos($_SESSION['ref'], 'OdemeBilgileri.php'))){
$_SESSION['ref'] = $_SERVER['REQUEST_URI'];
echo "<script>location='index.php?login'</script>";
exit;
}
}
$set_sorgu=$db->prepare("SELECT * from tbl_settings where ayar_id=:ayar_id");
$set_sorgu->execute(array( 'ayar_id' => 1 ));
$settings=$set_sorgu->fetch(PDO::FETCH_ASSOC);
if(isset($_SESSION['Email'])){
$user_sorgu=$db->prepare("SELECT * from tbl_members where UserID=:user_id");
$user_sorgu->execute(array( 'user_id' => $_SESSION["UserID"] ));
$user=$user_sorgu->fetch(PDO::FETCH_ASSOC);
}
?>
cikis.php dosyamın içinde unset var ve tıklanmadan çalışmıyor hiç bir yere include değil.
Tekrarlıyorum lokalde çalışıyor aynı sistem. Bu yüzden unset destroy vs bunların hiç biri geçerli değil. ve zaten kontrol de ettim.
- şıkkı biraz açabilir misin?
sayfaların kodlarını atarsan bi bakalım.
çok fazla problem olasılığı var
- httponly seçip http bağlantı üzerinden gidiyor olabilirsin
- oturum kontrolü yaptırdığın bir koşulu yanlış yazmış olabilirsin
3 include ettiğin bir dosyada yanlışlıkla destroy veya unseti oturum içerisine yazmış olabilirsin
bu böyle gider yani