v2.5.2
Giriş yap

_SESSION Problemi

pcmemo
1,220 defa görüntülendi

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.

Cevap yaz
Cevaplar (7)
mutluol
1479 gün önce

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

http://prntscr.com/rr815e

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

pcmemo
1479 gün önce

@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.)

mutluol
1479 gün önce

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();
}
  1. 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

pcmemo
1479 gün önce

@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; 
}
}
aydinkeskin
1479 gün önce

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

pcmemo
1479 gün önce
  1. 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.

  1. şıkkı biraz açabilir misin?
mutluol
1480 gün önce

sayfaların kodlarını atarsan bi bakalım.
çok fazla problem olasılığı var

  1. httponly seçip http bağlantı üzerinden gidiyor olabilirsin
  2. 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