PHP kurabiye ve oturumları sorun

5 Cevap php

Ben giriş için çerezleri kullanır ve örneğin ben ziyaretçi veritabanı sorgulama olmadan oturum olup olmadığını kontrol etmek istediğiniz bir oturum açma komut dosyası nasıl yapabilirim.

Örneğin ben bazı menü kullanıcıları yapman için sadece göstermek frontpage istiyorum.

(isLoggedIn ()) menüsünü göstermek eğer öyleyse ben yapmanız gerekir. Ama bu yüzden çok iyi değil her bir sorgu sayfası yükler var

Herhangi bir öneriniz?

5 Cevap

Bunu yapabilirsiniz:

session_start();

// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['loggedIn'])) {
  $_SESSION['loggedIn'] = true;

  // Add all the relevant user information data
  $_SESSION['username'] = $username;
  $_SESSION['password'] = $password;
  $_SESSION['etc'] = $etc;
}

Then you can request the user data to the $_SESSION global array. E.g.: requesting if the user is loggedIn (Don't forget to call to session_start() first):

function isLoggedIn() {
    return (isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']);
}

Eğer oturum açmak isterseniz:

session_destroy();

Zaman aşımı php.ini dosyasında ele alınabilir:

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440

Yoksa ini_set kullanarak çalışma zamanında ini değişkenleri işleyebilir:

ini_set('session.gc_maxlifetime', $sessionMaxLifeTime);

Sen funcion setcookie bir çerez oluşturmak ve çerez loggedIn set ve yanlış değilse kontrol etmek için bu işlevi kullanmak için olabilir. :)

function isLoggedIn() {
    return (isset($_COOKIE['loggedIn']) && $_COOKIE['loggedIn']);
}

Bunun için php oturumları kullanabilirsiniz. Session_start Ekle (); sayfalarınıza, girişten sonra, belki againstan veritabanı oturumda bir bayrak ayarlayabilirsiniz.

// user logged in sucessful
$_SESSION['logged_in'] = true;

Sayfalarınızda kontrol daha:

if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) {
 // display menu item
}

Bir bayrak giriş yaptıktan sonra http://php.net/manual/en/function.setcookie.php anında kullanın, daha sonra bu bayrak kontrol etmek için $ _COOKIES kullanın. Alternatif $ _SESSION için bu bayrak ayarlayabilirsiniz ve daha sonra orada kontrol edin.

PHP'nin $ _SESSION dosya tabanlı, yani (DBS hemen hemen her zaman daha hızlı dosya aramalarını daha olsa, böylece tüm bu yararlı olmayabilir) o kullanıyorsanız eğer olursa DB çarptı.

Sen memcached gibi bir bellek önbelleği kullanabilir.

Ya da, biraz daha az güvenlik için, bir zaman ve karma ile ikinci bir çerez saklamak olabilir. Bunu kesilirken, sen şimdiki zaman ve yalnızca uygulama mantığı bilen bir gizli tuz bağlamak sonra md5 () veya sha1 () bunu. Her sadece çerez zaman son bir saat (veya ne olursa olsun süre yapılandırmak) içinde ve karma geçerli olduğunu olduğunu kontrol edin, göz atın. Bir saat için sahte olabilir ve okunaklı oturumları başka bir şekilde kontrol etmek gerekir, ama sadece menü tabanlı işler için yeterli olabilir.