pazar pazar güzel bir soru sorayım. Şimdi 3 ayrı sunucuda 3 ayrı sistem var. Şimdi 1 inci sunudaki sisteme yada bu 3 ünden her hangi birinde kullanici login olunca dierlerinde tekrar tekrar login olmamasını nasil sağlarız. Lütfen yorumda şu olabilir gibi yapabilirsinden çok yöntem bu veya ben böyle calıştırıyorum gibi cevaplara ihtiyacım var. Aklımda bir yöntem var fakat biraz dolaylı bu yüzden en son onu yapacagım. Herkese iyi pazarlar.
Salih Ozanlagan
S
Login kayıtlarını mysql tutuyor bu yüzden sanırım sql ile yapabilirsin diye tahmin yürütüyorum
zaten login kayitları SQL erişimi gerektirecek fakat 3 ayrı sistemin db yapisi farklı mesela 1. sunucu kurumsal 2. e ticaret gibi dbleri fazla kariştirmak istemedim
Genelde login sayfaarı cookie veya session ile oluyor. Bu yüzden sadece aynı pc de isen cookieleri 1 sunucudan giriş yapınca, diğer sunuculara da cookie leri yazdırırsan. Ancak böyle bir şey yapılabilir.
Sessionları ortak bir sunucuda depolamalısınız. Ama bu iş biraz yaş.
En temiz yol session yönetimini veri tabanına taşıyıp, auth için ortak veri tabanını kullanmak
ortak derken mesela 1. sunucudaki veri tabanini dierleri de mi kullanacak ?
Sadece authentication işlemi yani kullanıcı yönetimi, girişi işlemlerini yöneten tablolar ortak bir veritabanında tutulacak. Üçü de buraya remote olarak bağlanacak. Sessionların kopya kayıtlarını burada bir tablo da aes256 ile şifreli tutun. Sonra tüm sunucularda önce local sessionlara göre sonra uzak veritabanından kontrol yapın giriş için.
mesela örnek olarak buna benzer bir şey yapiyor tam birebir degil ama facebook kendi üzerinden dier siteleri loginleyebiliyor.
facebook’ta access token, OAuth mantığı var o tamamen başka bir şey.
anladım yukarıda dedigin mantikla birsey kurmaya çalışacagım
Yani istediğiniz bir siteden yapılan girişi diğer sitede yakalamak ve direk giriş yaptırmış gibi göstermekse yukarı da dediğim en kolay ve mantıklı çözüm. Ama yok ben facebook tarzı bir sistem yapacağım, kullanıcı ona girerken yeniden giriş işlemi yapsın izin versin ana giriş yaptığı hesaptan falan diyorsanız o zaman facebook’un kullandığı OAuth, Access token yapısı devreye girer
facebook tarzı değil sadece 3 farklı sistemde de kulanıcıya tekrar tekrar login olmaya zorlamamak istiyorum tek sunucuda olsa ve tek sistem olsa tek db ile halledecektim de
Salih Ozanlagan session Dosyaları tmp klasörü altında o sunucuda tutulur. Eğer sunucular tamamen size aitse vps vds se ortak bir session katmanı oluşturabilirsiniz. Ama bu hem güvenliksiz hem sağlıksız bir işlem olur genelde büyük projelerde belli önlemlerle yapılıyor. Siz sessionları nasıl tutuyorsanız aynısını bir ortak da de tutun o dbyide remote mysql olarak açın diğer sunuculardan buna bağlanır kontrol edersiniz. Performans için tablo türünü Memory ayarlayabilirsiniz zaten veriler sürekli silinmesi gereken şeyler kalıcı değiller
Web servis ya da RMI gibi yöntemler kullanılarakda yapılabilir çoklu sistemden herhangibirinde login olduğunda diğerlerinedeki uzaktan login olma yöntem çalıştırıpda uygulanabilir.
Web service veya Api kullanarak yapabilirsin. Microsoft ve google bu sistemi kullanıyor.
session tutma, token ile hallet işlerini, token içerisinde ip datasınıda tut ki token çalınma ihtimaline karşı bir nebze önlem almış olursun.
Kurgun bence şöyle olmalı;
Herhangi sunucu üzerinden login olan bir user olsun. Kullanıcı logini başarılı ise sunucun kullanıcıya bir token gönderir. Bu token içerisinde ip, kullanıcı_id belki isim gibi bilgileri taşır. Token'ı sessionda tutmak yerine localStorage'de tutabilirsin. Kullanıcılardan gelen her işem için token'ı kontrol edersen login olup olmadığını diğer sunuculardada anlarsın. Ancak token'ın geçerli olduğunu sorgulatmak için ortak bir yapıya ihtiyacın olacak. Sunuculardan herhangi birinde tokens adından bir tablon olsun. Diğer tüm sunucuların token aldığında kontrolünü yapmak için (halen geçerli mi diye) bu ortak db'ye bağlanabilir.
Veya token içerisinde başlangıç tarihi dibi bir değer atarsın, sunucun token'ı aldığında ortak db'den sorgulamak zorunda kalmaz token tarihini kontrol eder. İyi bir şifreleme kullanırsan problem yaşayacağını zannetmem. Ancak kurgunu çok sağlam yapmalısın
+1 katılıyorum. Ayrıca LDAP ile çözebilirsen çok daha şık olur
Cross browser authentication. https olmasi lazim, Ajax ile sessionlari paylasirsin
ajaxla başka sunucuyla iletişim kurabilirmiyim bu şekilde
Tam bir bilgim olmamakla beraber yazıyorum, Redis ile login sessionlarının hepsini aynı sunucuda toplayıp aynı sessionlarını kullanabilirsiniz.
Birinde login olunca Üye ID yi barındıran bir cookie oluştur. Diğer sitelerden cookie olup olmadığına bak. Varsa cookiden ID yi al db de arat verileri çek session oluştur.
Salih Ozanlagan bu basit olan.
Simdi Sana dorduncu bir domain gerekiyor, buda cookie yapici gibi dusun, digera, b,c nin icinden cookieyi bu atacak
peki şu olay nasıl olur diyelim herhangi birinden çıkış yaptı ?
Cikisi aslinda dorduncu domainden yapiyor. Google da bu mantikla calisiyor. Bizde 2 sene once bir programda kafa yormustuk. Su anda bu mantikla yapiyoruz
Yusuf Tontul php sistem demi
Evet hocam
bu olaya sso deniyor. Aynı mekanizmayı turkcell'in sitesi de kullanıyor sso. Turkcell. Com. Tr adresinde. Aradığınız şeyde adımları böyle işliyor https://stackoverflow.com/a/35663573/4792552
bakayım hemen
Google ve Microsoft bu işi zaten yapıyor. Örnek vermek gerekirse siz hotmail e giriş yaparken üstte adres çubuğunda http://msn.com/, http://live.com/, http://outlook.com/ gibi adresler geçip en son http://mail.live.com/ a yönlendiriyor. Aynı şekilde google a giriş yaparken gmail, youtube, blogger gibi alan adlarından geçiş yaparak yönlendirildiğini fark edebilirsiniz.
mesele nasıl yapılıyor o kullanan var evet de nasıl işte orası mesele
görünen en basit yöntem diğer sunucuya geçerken querystring ile session verilerini oluşturacak datayı aktarmak.
Yaparsan ne olur yapmazsan ne olur diye bence bir dusun. Bir sistemi kullanan user diger sistemi ne sıklıkla kullancak, fayda/kod maliyeti ne olacak gibi sorular onemli.
3 ayrı sistem şu an var kullaniliyor a ayrı loginlerle
Bu dediğini biz yapıyoruz. Bir çok Web sunucusu var kullanıcı her sayfa değişiminde hangisi musaitse netscaler üzerinden ona yönleniyor. Böylelikle hız ve ha oluyor.
Ayrı bir redis sunucu kuracaksın,
Oturumları redis üzerinde tutacaksın olacak bitecek.
Kolaylıklar
bunun maliyeti tahmini ne olur ?
Sanal sunucu yaparsan maliyeti olmaz. Fiziksel yaparsan ucu biraz açık. Her fiyata yapılır
sanalda sorun yaşarmıyız çok trafik olmuyor
Trafiğinizi, hacminizi ve işinizi bilmediğimden yorum yapamayacağım, kusura bakmayın. Biz sanalı tercih ediyoruz, her gün milyonlarca trafik geçiyor üzerimizden hiç sorun yaşamıyoruz Kolaylıklar
Eren Buğdaycı tm önce sanalla başlarız o zaman yazılanların bir çoğunu denicez zaten mecbur sistem oturana dek zaten sistemleri bir klon sistemde deneyip gerçek sisteme uygulamak lazım.
kullanıcılar için ayrı bir veritabanı ve subdomain kullanırsınız google ın uyguladığı gibi daha işlevsel olur