2011-06-28 14 views
5

, tek bir kullanıcı giriş yaptığında, oturumu bilgi depolamak için nasıl karar vermek zorunda.Dosya verilerinin veritabanında saklanmasının avantajları/eksileri nedir? Bir web sitesi oluştururken

bir veritabanında saklayarak karşı kendi dosyasındaki her oturumu saklamanın bir avantajları ve dezavantajları nedir? Asp.net bir dosyada oturumu depolamak kolaylaştırmakla kalmaz

+1

Açık olması gerekirse, PHP gibi bir dil, varsayılan olarak, içeri/tmp dosyasında bir dosyada oturumu saklar. Ancak, bu dosyalar çalışma zamanı tarafından yönetilir, hiçbir zaman bir dosyaya erişme şekliniz için oturuma erişmeniz gerekmemelidir. RoR, varsayılan olarak bir çerez kullanır; bu da dosya tabanlıdır, ancak böyle davranılmamaktadır. –

cevap

2

- potansiyel ve (evet o zaman önbelleğe alınabilir) ama yerine gibi tasarlanmış bellek mekanizmasında bir kullanacaktır bellek yetersiz bu dosyayı takas riskiyle ve sonra oldukça standart olmayan bir şey kullanıyorsunuz.

  1. ASP.Net

    size tek sunucu üzerinde kullanılmak üzere iyidir hafıza koleksiyonunda kullanabilirsiniz. Birden fazla yük dengeli web sunucusuna (web grubu) ihtiyaç duyarsanız ve bir kullanıcı her istek için başka bir sunucuya gidebilirse, bu seçenek iyi değildir. Web süreci yeniden başlarsa, oturumlar kaybolur. Ayrıca zaman aşımı yapabilirler.

  2. Birden sunucu erişimi için asp.net'de bir devlet sunucusu kullanabilirsiniz - Bu web sunucunuzun sürecinin dışında çalışır. Web süreci yeniden başlatılıyorsa - sorun değil ve birden çok sunucu buna erişir. Devlet sunucusuna giden bu trafik şifrelenmez ve trafiği daha güvenli bir ortamda güvenceye almak için ideal olarak IPSEC politikalarını kullanırsınız. Eğer oturum veritabanı olarak sql sunucusu kullanmak web.config kurarak durumunu (otomatik) yönetmek için sql sunucusu kullanabilirsiniz

  3. . Bu, yüksek performanslı bir veritabanı ve çoklu sunucu erişimi avantajı sağlar.

  4. normal mekanizmanın dışında uzun süre için devam etmelerini ihtiyaç ve veritabanı alanları (belki belirli alanları sorgulamak istiyorum)

üzerinde sıkı bir denetim istiyorsanız, bir veritabanında kendi oturumları kullanabilirsiniz

Ayrıca meraktan yoksun - oturumları kullanıcı tercihleri ​​olarak mı kullanıyorsunuz? Bu durumda, asp.net profilleri

+0

Ayrıca, buradaki detaylarla kendiniz ilgilenin - her sistem kendi içinde yerleşik metotlara sahiptir - bu, yüksek performansla çok ilgilendiğiniz bir yer olmadıkça, çeşitli mekanizmalardaki farklılıkları fark etmeyeceksiniz. –

1

i olsa r-o-r hakkında emin değilim. Ancak hafızada (aynı süreçte) kayıt oturumu, bir db'ye sahip olmaktan daha hızlıdır. Bir DB'ye sahip olmak, uygulamanıza daha iyi ölçeklenebilirlik sağlayabilir (uygulamanızı bir web grubu ortamında dağıtmak istediğinizde, tüm sunucuların oturumu aramak için ortak (db) vardır).

This kod proje makale asp.net oturum yönetimi çok iyi bir fikir verir.

Genellikle hiç bir dosyada bu bilgileri saklamak olmaz
1

Önceki sorularınıza dayanarak, bunun CGI :: Application :: Plugin :: ile CGI :: Application modülünü kullanma bağlamında sorulması gerektiğini tahmin ediyorum. Oturum, toplantı, celse. Bu modülü varsayılan ayarlarla kullanırsanız, oturum verilerini/tmp dizininde saklanan dosyalara yazacaktır. Bu, PHP'nin yaptıklarına çok benzemektedir. Uygulamanız paylaşılan bir barındırma ortamında çalışıyorsa, diğer nedenlerden dolayı/tmp içindeki verileri görüntüleyebileceğinden/değiştirebileceğinden, güvenlik nedenleriyle bunu yapmak istemezsiniz. Dosyaları, yalnızca okuma/yazma (yani,/tmp değil) izniniz olan bir dizine yazarak düzeltebilirsiniz. Gelişirken, YAML'yi varsayılan olarak (depolanabilir) değil, serileştirmek için kullanmayı tercih ederim çünkü insan tarafından okunabilir. Kendi web sunucunuza sahipseniz ve veritabanı (mysql) sunucunuzu aynı makinede çalıştırabiliyorsanız, oturum verilerini bir dosya yerine bir veritabanında depolamak genellikle daha yüksek bir performansa neden olur. Kalıcı bir veritabanı bağlantısı sağlamak için (yani mod_perl veya fastcgi kullanarak).AMA - veritabanınız uzak bir ana bilgisayardaysa ve oturum verilerini güncellemeniz gereken her seferinde yeni bir bağlantı açmanız gerekiyorsa, performans aslında daha kötü olabilir ve bir dosyaya yazı yazmak daha iyi olabilir. Uygulamanıza bir veritabanı gibi görünen sqlite'ı da kullanabileceğinizi, ancak yerel dosya sisteminizde gerçekten sadece bir dosya olduğunu unutmayın. Performanstan bağımsız olarak, bant genişliği sınırlamaları ve diğer kaynak kısıtlamaları nedeniyle veritabanı seçeneği paylaşılan ana bilgisayar ortamlarında istenmeyebilir. Performans farkı da düşük trafikli bir alan için (yani, günde birkaç bin isabet) göz ardı edilebilir.

+0

Evet, bu tam olarak doğru =) Burada ayarlıyorum ve bunu nasıl saklamalıyım diye merak ediyorum. Ben de YAML'ın büyük bir hayranıyım. Bu bağlamda "serileştirme" ne demektir? Veri tabanı yerine YAML kullandığınızı sanmıyorum? Dosya tabanlı vs veritabanı tabanlı hakkında çok yararlı gerçekler! –

+1

Oturum verileriniz perl veri yapısında (genellikle sadece basit bir karma) saklanır. Bu veri yapısını, bir dosyada veya bir veritabanında okuyabileceğiniz ve yazabileceğiniz bir şeye dönüştürmelisiniz. Serileştirmenin anlamı budur. YAML kullanırsanız, verileri basit bir metin dizesine serileştirirsiniz. 'Depolanabilir' modülü, verileri daha kompakt, ikili bir biçimde saklar. Çok hızlı ve çok verimli - ama çok taşınabilir değil. Geçmişte yanmıştım, örneğin, sürümleri yükselterek, yeni sürümün eski sürüm tarafından yazılan verileri okuyamadığını bulduk. – scorpio17

+1

Üretim için mysql ile stoklanabilir serilaştırıcıyı kullanıyorum. Bununla birlikte, yeni bir şey geliştirirken, dosya tabanlı oturumlara geçiyorum ve YAML ile serileştiriyorum, böylece hangi oturum verilerinin depolandığını kolayca görüntüleyebilirim. Hata ayıklamayı kolaylaştırır. CGI :: Application ile ileri geri geçiş yapmak çok kolay. Tüm uygulama sınıflarının türettiği bir temel sınıf içindeki bir cgiapp_init yönteminde her şeyi kontrol ediyorum. – scorpio17

İlgili konular