الصفحة الرئيسية>دروس برمجة الشبكات>دروس ASP.NET

طريقة مجدية للتحكم في تسجيلات دخول المستخدم المتكررة باستخدام ذاكرة التخزين المؤقت والمؤقت (ATLAS)

الكاتب:Eve Cole وقت التحديث:2009-07-01 16:27:19



برنامج الخلفية

باستخدام النظام؛
باستخدام System.Data؛
باستخدام System.Configuration؛
باستخدام System.Web؛
باستخدام System.Web.Security؛
باستخدام System.Web.UI؛
باستخدام System.Web.UI.WebControls؛
باستخدام System.Web.UI.WebControls.WebParts؛
باستخدام System.Web.UI.HtmlControls

الفئة العامة الجزئية _Default: System.Web.UI.Page
{
Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
{

}
باطلة محمية Button1_Click(مرسل الكائن، EventArgs e)
{
يحاول
{
//اسم المستخدم
string sName = TextBox1.Text;

//إنشاء مفتاح
string sKey = sName + "_Login";

// احصل على قيمة المفتاح المحدد في ذاكرة التخزين المؤقت
string sUser = Convert.ToString(Cache[sKey]);

//تحقق من وجوده
إذا (sUser == null || sUser == String.Empty)
{
Session["username"] = sName;

// لا يوجد عنصر لهذا المفتاح في ذاكرة التخزين المؤقت، مما يشير إلى أن المستخدم لم يقوم بتسجيل الدخول، أو أن مهلة تسجيل الدخول قد انتهت.
// يمثل TimeSpan فاصلًا زمنيًا ويحصل على قيمة إعداد النظام لمهلة الجلسة.
//(إذا كنت ترى أن الوقت المسموح به للمستخدمين لتسجيل الدخول مرة أخرى أقل من مهلة الجلسة، فيمكن تعيين هذه القيمة أصغر)
//TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);
// للتوضيح هنا، تم ضبط الفاصل الزمني لحفظ ذاكرة التخزين المؤقت على 20 ثانية.
TimeSpan SessTimeOut = new TimeSpan(0, 0, 0, 20, 0);
HttpContext.Current.Cache.Insert(
مفتاح,
مفتاح,
باطل،
التاريخ والوقت.القيمة القصوى،
سيسيتايم أوت,
System.Web.Caching.CacheItemPriority.NotRemovable،
باطل
);

//بدء الموقت
this.Timer1.Enabled = true;

// عند تسجيل الدخول لأول مرة، يمكنك القيام بالعمل الذي تريد القيام به.
Label1.Text = "مرحبًا!" + sName + "مرحبًا"؛
}
آخر
{
// تم العثور على سجل المستخدم في ذاكرة التخزين المؤقت، مما يشير إلى أنه قد قام بتسجيل الدخول بالفعل ويحظر عليه تسجيل الدخول مرة أخرى.
Label1.Text = "عذرًا، تم تسجيل دخول هوية المستخدم الخاصة بك";
يعود؛
}
}
قبض (System.Exception على سبيل المثال)
{
Label1.Text = ex.Message;
}
}
باطلة محمية Button2_Click (مرسل الكائن، EventArgs e)
{
//اسم المستخدم
string sName = TextBox1.Text;

//إنشاء مفتاح
string sKey = sName + "_Login";

// لتسهيل الاختبار، تم إعداد هذه الطريقة لإزالة معلومات تسجيل الدخول من ذاكرة التخزين المؤقت
HttpContext.Current.Cache.Remove(sKey);

Label1.Text = Session["username"] + "تم مسح معلومات تسجيل دخول المستخدم من ذاكرة التخزين المؤقت!";
}
Timer1_Tick (مرسل الكائن، EventArgs e) محمي باطل
{
إذا (جلسة ["اسم المستخدم"] != فارغة)
{
//اسم المستخدم
string sName = TextBox1.Text;

//إنشاء مفتاح
string sKey = sName + "_Login";

// احصل على قيمة المفتاح المحدد في ذاكرة التخزين المؤقت
string sUser = Convert.ToString(Cache[sKey]);

TimeSpan SessTimeOut = new TimeSpan(0, 0, 0, 20, 0);
إذا (sUser != فارغة)
{
HttpContext.Current.Cache.Remove(sKey);
}
HttpContext.Current.Cache.Insert(
مفتاح,
مفتاح,
باطل،
التاريخ والوقت.القيمة القصوى،
سيسيتايم أوت,
System.Web.Caching.CacheItemPriority.NotRemovable،
باطل
);
}
آخر
{
this.Timer1.Enabled = false;
}
}
}
نموذج التعليمات البرمجية:/Files/heekui/WebLogin.rarPostscript

:
1 هذه الطريقة قابلة للحكم على عمليات تسجيل الدخول المتكررة من قبل المستخدمين، ولكنها مصحوبة أيضًا بمشكلة أخرى. إذا تم ضبط المؤقت على العمل بانتظام، فلن تنتهي الجلسة أبدًا طالما لم يتم الخروج بشكل طبيعي أو إغلاق المتصفح. فهل سيكون لهذا أي آثار سلبية؟
2 هذه الطريقة ستعمل على إرسال طلبات إلى الخادم بشكل منتظم لكل مستخدم مما سيؤدي بلا شك إلى زيادة العبء على الخادم. إذا كان هناك الكثير من الأشخاص متصلين بالإنترنت في نفس الوقت، فهل سيكون لهذا النوع من الطلبات تأثير كبير على الخادم؟
لذلك، لا يمكننا إلا أن نقول أن الطريقة المذكورة أعلاه ليست سوى طريقة مجدية، ولكن لا يوجد اختبار ما إذا كانت مثالية. لا أعرف إذا كان لديك أي طريقة أفضل.
http://www.cnblogs.com/heekui/archive/2007/01/08/615254.html