küresel kullanıcı oturum açmış kullanıcı tabloda herhangi bir alanın değerini almak

3 Cevap php

Im bir oyun topluluğu yapma ve yerine ben bu fonksiyonu yapılan tüm sayfalarda sorguları çok sahip pek olmadan herhangi bir sayfada kullanıcının herhangi bir bilgi kapmak mümkün olmak istiyorum. Bunu yapmak için daha iyi mi? Bu siteyi yavaşlatır mı?

/**
* Возьмем значение из любой области authed пользователей.
*/
function UserData($f)
{
    global $_SESSION;


    return mysql_result(mysql_query("SELECT `$f` FROM `users` WHERE `id` = ".intval($_SESSION['id'])), 0, $f);
}

3 Cevap

$ _SESSION Zaten küresel olduğunu ve sorunu çözmek için doğru yoldur.

Ihtiyacı için en iyi o, bir diziye, gibi bir şey açtığında kullanıcı verilerini depolamak için:

session_start();
// $mysql_data_row is the mysql row containing your user's data;

$_SESSION['user'] = $mysql_data_row;

Ve her sayfada, veritabanını sorgulamak zorunda kalmadan oturumda depolanan tüm verilere erişebilirsiniz. Örneğin:

session_start();
echo 'hello ', $_SESSION['user']['name'];

Bu işlev hala sayfaya bir sorgu ekler.

Nasıl temel kullanıcı bir oturumda bilgi ya da bir çerez depolama hakkında?

Bu sadece verili karar vermek biraz zor, ama genel olarak bu sizin işlevini nasıl kullandığınıza bağlıdır.

Bir ünlü teknik, senaryonun çok üstündeki tüm kullanıcı verilerini yüklemek ve istek sırasında o kullanmaktır. Eğer ben tahmin ediyorum bir AJAX tabanlı bir uygulama, bina eğer çoğu veri kullanmak için asla çünkü Ama, bu her zaman yardımcı olmuyor.

İyi bir uzlaşma normal sayfa istekleri için tüm kullanıcı verileri ile global bir değişken kullanmak olabilir ve benzeri AJAX istekleri ve için diğer yandan tek nitelik sorguları olacaktır.

Yine bu uygulamaya bağlıdır. Temel kural: ne kadar sıklıkla "sorgu" veritabanı üzerinde bir göz tutmak için çalışın. PHP yerine minimum sorguları devam ederdim yani veritabanı sorgularını genellikle daha hızlıdır.