PHP $ _SESSION ile ilgili sorunlar;

6 Cevap php

Ben OTURUM değişkenler bana kendilerine yeni değerler atamadan değiştirmek başka bir sayfada bir veritabanını sorgulamak bir kullanıcı, ancak oturum açtığında bir veritabanından veri depolamak için SESSIONS kullanıyorum.

Herkes sorun ne olabilir biliyor mu?

Değişkenleri kaydeder giriş sayfası:

enter code here
    session_start();

    if($_POST['login_button']) {

    require_once('includes/config.inc.php');

    $username = $_POST['login_username'];
    $password = $_POST['login_password'];

    $hash_pwd = sha1($password);

    if(($username != NULL) && ($password != NULL)) {

    $conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error());
mysql_select_db('main') or die(mysql_error());

    $check_users =  "SELECT * ".
			"FROM users ".
			"WHERE email = '{$username}' AND password = '{$hash_pwd}'         ".
			"LIMIT 1";

    $result = mysql_query($check_users);
    $counted = mysql_num_rows($result);

    if($counted != 1) {

    header("location:login.php?fail");  } else {

    while ($row = mysql_fetch_array($result)) {

$useR_login_un = $row['name'];
$useR_login_user_id = $row['user_id'];
$useR_login_login_time = $row['login_times'];
$useR_login_user_email = $row['email'];
$useR_login_course = $row['course'];
$useR_login_campus = $row['campus'];

$useR_login_login_time = $useR_login_login_time + 1; 

$useR_login_datenow = date("Y-m-d") . " " . date("H:i:s");

$useR_login_sid = sha1($useR_login_user_id) . rand() . md5($pinch_o_salt);

$update_login_times = 	"UPDATE users ".
						"SET login_times = '{$useR_login_login_time}', last_login = '{$useR_login_datenow}' ".
						"WHERE email = '{$useR_login_user_email}' AND user_id = '{$useR_login_user_id}'";

mysql_query($update_login_times);


mysql_close($conn);

$_SESSION['sid'] = sha1($useR_login_user_id) . $pinch_o_salt;
$_SESSION['user_id'] = $useR_login_user_id;
$_SESSION['username'] = $useR_login_user_email;
$_SESSION['name'] = $useR_login_un; 
$_SESSION['course'] = $useR_login_course;

if($useR_login_login_time == 0) {
session_write_close();
header("Location: first_run.php");	
exit;
} 
else { 
session_write_close();
header("Location: home.php"); 
exit;
}
    }

    } 

    } else { header("Location: login.php?fail"); exit; } }

DÜZENLEME: Bu değişkenleri saklar ve ben başka bir sayfaya gittiğinizde, değişkenler görünür, ama yenileme ne zaman, bazıları bazıları aynı kalmak kaybolur, ve veritabanındaki başka bir kullanıcıdan bilgilere bazı değişiklik.

EDIT2: ben tekrar veritabanını sorgulamak bu sadece olur fark ettik.

Sorunlara neden oluyor şey (home.php ON):

$conn = mysql_connect('localhost', 'ggordan_admin', 'valeg0r') or die(mysql_error());
mysql_select_db('ggordan_wmin') or die(mysql_error());

$query = 	"SELECT * ".
			"FROM users ".
			"WHERE course = '".$_SESSION['course']."' ".
			"LIMIT 3";

$result = mysql_query($query);
$numrows = mysql_num_rows($result);

echo $numrows;

while ($my = mysql_fetch_array($result)) {

$id = $row['user_id'];
$name = $row['name'];

}

Ben bu açıklama, bu gerçekleşmesi için görünmüyor.

EDIT: Ben başka bir senaryo üzerinde değişken çatışmalar ile ilgisi var olduğunu fark ettik. Bu oluyor olmalı

$conn = mysql_connect('localhost', 'ggordan_admin', 'valeg0r') or die(mysql_error());
mysql_select_db('ggordan_wmin') or die(mysql_error());

$query = 	"SELECT * ".
			"FROM users ".
			"WHERE course = '".$_SESSION['course']."' ".
			"LIMIT 3";

$result = mysql_query($query);
$numrows = mysql_num_rows($result);

echo $numrows;

while ($my = mysql_fetch_array($result)) {

    // if i change $id to $user_id it breaks the login script 
$id = $row['user_id'];
$name = $row['name'];

}

6 Cevap

Sayfalarınız https veya farklı sunucular için http geçiyorsanız eğer nedeni olabilir, bu yeni bir oturum kimliği oluşturulmasına neden olur.

Tarayıcınız oturumu için çerez kaydeder ve aynı tarayıcı örneğinden aynı etki için tüm aramalar için döndürür. Eğer IE veya Firefox iki farklı kopya başlattı varsa (yani, farklı oturumları olabilir.

PHP yükleme ve depolama dışındaki oturumlar üzerinde herhangi bir işlem yapmaz. Lütfen oturum değişkenleri değiştirmek için tek yol sizin sunucu sayfaları bunları kendiniz değiştirebilirsiniz olduğunu. Diğer sorun alınmadan / depolandığı zaman oturumu deserializing / serializing ile olabilir. Karmaşık sınıfları varsa, onlar çeviri karışık olabilir.

Belki de sizin oturum değişkenlerinin içeriğini görüntülemek tarayıcınızda yeni bir sekmede bunu başlatmak, ve Eğer diğer sekmelerde bir sayfa güncellemesi yapmak her zaman yenilemek için bir sayfa yapabilir.

Ben bir programcı bir hata olduğunu sanıyorum: programcı değiştirin ve tekrar deneyin.

Çağrısı kaldırmak için çalışın

session_write_close()

Ben duydum bu oturumları ile bazı sorunlara neden.

I got ilk izlenim size oturumu istemci doğrulandıktan hemen sonra, ben haklıyım kapanış olmasıdır?

// if user does not validate close session and take him back to login
if($useR_login_login_time == 0) {
    session_write_close();
    header("Location: first_run.php");      
    exit;
   }
// if user validates DO NO CLOSE SESSION and take him home
else { 
    //session_write_close();
    header("Location: home.php"); 
    exit;
}

Bu mantık kısmına bir göz atın ve bu sorunu giderir varsa bana bildirin!

Umarım yardımcı olur.

Bu problem register_globals olduğu olduğu anlaşılmaktadır on.

Basit bir soru soran benim aşırı karmaşık bir şekilde cevap vermeye çalıştım herkese teşekkürler :)