Neden ve nasıl ASP.NET'te oturum kimlikleri yeniden kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 899918 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Giriş

Bu makalede, Microsoft ASP.NET oturum kimlikleri, neden ve nasıl kullanıldığını açıklar.

Daha fazla bilgi

ASP.NET oturum durumunu sunucu tarafı, kullanıcıya özgü verileri sağlayan bir teknolojidir. Oturum durumu örneği kullanıcı isteklerini işlemek için Web uygulamaları bu verileri kullanabilirsiniz. Oturum durumu kullanıcı bir oturum KIMLIğI tarafından tanımlanır Oturum KIMLIĞI, aşağıdaki yöntemlerden birini kullanarak teslim:
  • Oturum KIMLIĞI, kullanıcı tarayıcıya gönderilen tanımlama bilgisi bir parçasıdır.
  • Oturum KIMLIĞI URL'DE katıştırılır. Bu teknik, tanımlama bilgisi olmayan oturum olarak bilinir.
Oturum kimlikleri, 20-karakter dizesi temsil edilen 120 bit rasgele bir sayı olan. Dize, böylece bir URL eklenebilir ve URL kodlaması meydana gerekmez biçimlendirilir. Örneğin, tanımlama bilgisi olmayan oturumlar dize kullanılabilir. Oturum kimlikleri, en sık kullanılan oturum kimlikleri saklamak için tanımlama bilgileri kullanarak yöntemdir.

Kullanıcı ilk Web tarayıcılarının açar ve ardından ASP.NET oturum durumunu kullanan bir Web sitesine gittiğinde, tanımlama bilgisi adı "ASP.NET_SessionId" Tarayıcı 20 karakter uzunluğundaki bir değer için gönderilir.

Kullanıcı aynı DNS etki alanı içinde attığında, Web tarayıcısının bu tanımlama bilgisi için kaynaklanan etki alanına göndermeye devam eder.

Örneğin, app1.tailspintoys.com ve app2.tailspintoys.com hem ASP.NET uygulamalardır. Kullanıcı için app1.tailspintoys.com gider ve ardından app2.tailspintoys.com için gittiğinde, her iki uygulama aynı tanımlama bilgisini ve aynı oturum KIMLIĞI her uygulama içinde bir kullanıcının oturum durumunu izlemek için kullanırsınız. Uygulamalar, aynı oturum durumu paylaşmayın. Uygulamalar, yalnızca oturum KIMLIğI paylaşma

Bu nedenle, oturum kimlikleri çeşitli nedenler için yeniden kullanabilirsiniz. Örneğin, oturum kimlikleri yeniden, aşağıdakileri gerekmez:
  • Bir geçerli oturum KIMLIğI ile sunulan, yeni bir şifreli benzersiz bir oturum KIMLIĞI oluşturun...
  • Tek bir etki alanındaki her bir ASP.NET uygulaması için bir yeni bir oturum KIMLIĞI oluşturun.
Web uygulamasını bir oturum açma gerektirir ve sayfa veya seçeneği kapalı bir günlüğü sağlar, kullanıcı oturum Web sitesi, oturum durumu temizlemenizi öneririz. Oturum durumu temizlemek için <a0></a0>, Session.Abandon yöntemini çağırın. Oturum durumu için oturum durumu zaman aşımı beklemeden flush Session.Abandon yöntemini sağlar. Varsayılan olarak, bu zaman aşımı 20 dakikalık Kayan süre sonu ' dir. Bu süre sonu, her kullanıcı, Web sitesi için bir istekte ve oturum KIMLIĞI tanımlama sunar yenilenir. Abandon yöntemi, oturum durumu terk belirten oturum durumu nesnesinde bir işaret oluşturur. Bayrağın inceledi ve sonra sayfa isteği sonunda dikkate. Bu nedenle, Abandon yöntemini çağırdıktan sonra kullanıcı oturumunun nesneleri sayfa içinde kullanabilirsiniz. Sayfa işlem tamamlanır tamamlanmaz, oturumun kaldırılır.

Işlem içindeki oturum durumu modunu kullandığınızda, bu oturum durumu nesneler HttpCache içinde depolanır. Aşağıdaki koşullar geçerli olduğunda, HttpCache bir geri arama yöntemini destekler:
  • Bir önbellek girdisi kaldırıldı.
  • Oturum durumu Yöneticisi Session_OnEnd olay işleyicisi, önbellek girdisi kaldırıldığında çağrılacak kaydeder.
Oturum durumu Yöneticisi önbellekte bulunan bir oturum durumu nesnesi kaldırır HttpCache Yöneticisi herhangi bir kayıtlı geri çağırır. Bu davranış, etkin, Session_OnEnd olay işleyicisinin yükseltir.

Bir oturumu iptal ettiğinizde, oturum KIMLIĞI tanımlama kullanıcının tarayıcısından kaldırılmaz. Bu nedenle, oturumu durdurulmuş olarak, aynı uygulama için herhangi bir yeni istekleri aynı oturum KIMLIĞI kullanır ancak bu yeni oturum durumu örnek bir sahip olacaktır. Kullanıcı, aynı DNS içinde başka bir uygulama açarsa aynı anda Abandon yöntemi, bir uygulamadan çağırıldıktan sonra etki alanı, kullanıcı, oturum durumu kaybetmezsiniz.

Bazı durumlarda, oturumun KIMLIğINI yeniden isteyebilirsiniz Yapın ve sonuçları, oturum KIMLIĞI, yeniden kullanma, anlamak için aşağıdaki kod örneği bir oturumu iptal et ve oturum KIMLIĞI tanımlama bilgisini silmek için kullanın:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
bu kod örneği, oturum durumu sunucusundan temizler ve oturum durumu tanımlama null olarak ayarlar. Boş değer, tanımlama bilgisinin tarayıcıdan etkin temizler.

Tarayıcı kapatılmamış bir kullanıcıyı uygulamadan kütüğe kaydetmez ve oturum durumu zaman aşımı oluşur, uygulama hala aynı oturum durumu tanımlama kullanabilirsiniz. Bu davranış, kullanıcı oturum açma sayfasını ve kullanıcının oturum durumu tanımlama sunulması için yönlendirilmesine neden olur. (Login.aspx) oturum açma sayfasını açtığınızda, bir yeni bir oturum KIMLIĞI kullanılmasını sağlamak için <a0></a0>, boş bir tanımlama bilgisi, istemciye geri gönderir. Bunu yapmak için <a0></a0>, bir tanımlama bilgisi, yanıt derlemesine ekler. Daha sonra yanıt tahsilat istemciye geri gönderir. Boş bir tanımlama bilgisi göndermek için en kolay yolu, Response.Redirect yöntemini kullanmaktır. Tanımlama bilgileri koleksiyonu her zaman için ASP.NET_SessionId bir değer olduğundan, Response.Redirect döngü oluşturacak olduğundan, bu tanımlama bilgisi varsa, yalnızca sınamanız edemiyor. Bir sorgu dizesi, oturum açma sayfasına yeniden ayarlayabilirsiniz.

Veya, aşağıdaki kod örneğinde gösterildiği gibi farklı bir tanımlama bilgisi için oturum açma sayfası zaten, yönlendirilir, bildirmek için kullanabilirsiniz. Güvenlik artırmaya yardımcı olmak için ve hiç kimse oturum açma sayfasına ikinci bir tanımlama bilgisi ile birlikte ASP.NET tanımlama bilgisi'ni kullanarak açmaya çalışırsa emin olmak için aşağıdaki kod örneği FormsAuthentication sınıfı şifrelemek ve tanımlama bilgisi verilerin şifresini çözmek için kullanır. Sonra örnek kod 5 saniyelik bir zaman aşımı ayarlar.
private void Page_Load(object sender, System.EventArgs e)
{ 
if( !IsPostBack && 
( Request.Cookies["__LOGINCOOKIE__"] == null ||
Request.Cookies["__LOGINCOOKIE__"].Value == "" ) )
{
//At this point, we do not know if the session ID that we have is a new
//session ID or if the session ID was passed by the client. 
//Update the session ID.

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

//To make sure that the client clears the session ID cookie, respond to the client to tell 
//it that we have responded. To do this, set another cookie.
AddRedirCookie();
Response.Redirect( Request.Path );
}

//Make sure that someone is not trying to spoof.
try
{
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt( Request.Cookies["__LOGINCOOKIE__"].Value );

if( ticket == null || ticket.Expired == true ) 
throw new Exception();

RemoveRedirCookie();
}
catch
{
//If someone is trying to spoof, do it again.
AddRedirCookie();
Response.Redirect( Request.Path );
}


Response.Write("Session.SessionID="+Session.SessionID+"<br/>");
Response.Write("Cookie ASP.NET_SessionId="+Request.Cookies["ASP.NET_SessionId"].Value+"<br/>");
} 

private void RemoveRedirCookie() 
{ 
Response.Cookies.Add(new HttpCookie("__LOGINCOOKIE__", "")); 
} 

private void AddRedirCookie()
{

FormsAuthenticationTicket ticket = 
new FormsAuthenticationTicket(1,"Test",DateTime.Now,DateTime.Now.AddSeconds(5), false,""); 
string encryptedText = FormsAuthentication.Encrypt( ticket ); 
Response.Cookies.Add( new HttpCookie( "__LOGINCOOKIE__", encryptedText ) );
}

Özellikler

Makale numarası: 899918 - Last Review: 8 Eylül 2006 Cuma - Gözden geçirme: 1.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft .NET Framework 1.1
Anahtar Kelimeler: 
kbmt kbinfo kbhowto KB899918 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:899918

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com