Nasıl kullanıcı web uygulaması giriş olup olmadığını kontrol etmek?

4 Cevap php

Ben web uygulaması kimlik bütün detayları öğrenmek istiyorum. Yani, sıfırdan bir CodeIgniter kimlik doğrulama kütüphanesi yazmaya karar verdim. Şimdi, ben bir kullanıcı giriş olup olmadığının nasıl belirleneceği konusunda tasarım karar vermek zorunda.

Temelde, sonra kullanıcı girişi kullanıcı adı ve şifre çifti. Bir çerez web uygulamasında aşağıdaki seferlerinden adı gerekmez, bu oturum için belirlenen ve bir şifre. Sunucu tarafı oturum tanımlama geçerli kullanıcı giriş olup olmadığını belirlemek için geçerli olup olmadığını kontrol edecektir. Soru: çerez sunucu tarafında verilen geçerli çerez olup olmadığını belirlemek için nasıl?

Ben en basit yolu, hem de oturum statüsünde saklanan çerez değere sahip olan görüntü olabilir. Her HTTP isteği için, çerez gelen değer ve sunucu oturumundan değerini karşılaştırın. (Kurabiyelere CodeIgniter oturum kütüphane mağaza oturum değişkenleri yana, bazı çimdik olmadan geçerli değildir.) Bu yöntem, sunucu tarafında depolama gerektirir.

Büyük web uygulaması için birden fazla veri merkezlerinde konuşlanmıştır. Bu mümkün olduğunu kullanıcı girişi kullanıcı adı ve şifre o / o daha sonra başka bir veri merkezindeki web uygulamasına erişmek ise, bir veri merkezlerinde gezinirken. Beklenen davranış olduğunu kullanıcı sadece giriş kullanıcı adı ve şifre kez. Sonuç olarak, tüm veri merkezleri oturum durumunu erişebilir olmalıdır. Bu bile oturum durumu gibi veritabanı gibi harici depolama saklanır uygulanabilir mümkün değildir.

Google'ı denedim. Ben Asya bölgesindeki veri merkezleri için beni yönlendirmek gerekiyordu Asya proxy ile Google'a giriş. Sonra Kuzey Amerika'da veri merkezleri için bana yönlendirmelidir Kuzey Amerika vekil geçmek. Tekrar kullanıcı adı ve şifre sormadan giriş tanır.

Yani, kullanıcı sunucu tarafı oturum statüsü olmadan giriş olup olmadığını belirlemek için herhangi bir yolu var mı?

4 Cevap

No, that's impossible.
These datacenters is not isolated from each other but interconnected.
It is distributed but solid "external storage such as database"

Çapraz etki yetkilendirme başka bir konudur ama kolay da elde etti.

Kullanıcı herhangi bir kullanıcı seçenekleri, kimlik bilgileri olmadan, günlüğe sadece gerçeği - - şey, böyle bir bilginin zaten ne faydası var? Neden sunucu tarafında bir veritabanı olmadan?

Yararlı kaynaklar:

PHP çözümü ile çoklu sunucu giderken bu sadece bir çok sorunları - Ben o yüzden arama konuyla ilgili bulmak için daha fazla olduğuna eminim.

Ayrıca, Sunucu fayının bakarak düşünün.

Bir oturum tanımlama var gibi görünen bir şey, çok kötü bir fikir çünkü kullanıcı just doğrulanmış olduğunu varsayarsak. Eğer ilk session_start () çağırmadan oturum hakkında gerçekleri ölçmek için çalışıyor başladığınızda Ayrıca kod çok dağınık olmaya devam ediyor. Daha iyi bir çözüm itelf, örneğin oturumda kullanıcı doğrulanmış (ve potansiyel yetkilendirme BİLGİ EDİNME bazı) olduğu gerçeğini saklamak için

 session_start();
 if (!$_SESSION['auth_user']) {
    if ($_POST['username'] && $_POST['password'] 
       && check_valid($_POST['username'],$_POST['password']) {
          $_SESSION['auth_user']=$_POST['username'];
       } else {
          // user is not logged in
          header('Location: /login.php');
          print 'You are not logged in';
          exit;
       }
 }

C.

Yani, kullanıcı sunucu tarafı oturum statüsü olmadan giriş olup olmadığını belirlemek için herhangi bir yolu var mı?

Evet, var. Sunucu şifreli kullanıcı kimliği (ve muhtemelen diğer veriler) ile bir cookie gerekir. Tüm sunucular anahtarını paylaşmak, sonra onlar da bu tanımlama şifresini biliyorum, ve böylece bağımsız kullanıcı kimlik doğrulaması yapabilirsiniz. Cookie de şifrelenmemiş kullanıcı kimliği varsa, o zaman geçerli olmadığını kontrol etmek için (tuz veya MAC ile karma aka) özel tek yönlü şifreleme işlevini kullanabilirsiniz. Eğer gerçekten güvenlik konusunda önem veriyorsanız, daha fazla veri örneğin şifreleyebilirsiniz Vb IP adresi, son kullanma tarihi, Eğer isterseniz, aynı zamanda kamu ve özel tuşları ile, asimetrik şifreleme kullanmak, ve / veya dijital imza yapabilirsiniz.