PDA

View Full Version : ورود اتوماتیک



kochol
جمعه 25 شهریور 1384, 16:11 عصر
سلام
من قبل از ارسال این بحث جستجو کردم ولی تاپیکی پیدا نکردم مربوط به این موضوع.
خواستم بدونم چه روشی بهتر است استفاده کنم که مثل این سایت کاربر همیشه شناخته بشه و سشنش ایجاد بشه
و اگر دکمی را زد که اطلاعاتی را وارد سایت بکند اول سشنش دوباره ایجاد بشه بعد عمل کنه.
خیلی ممنون

Behrouz_Rad
جمعه 25 شهریور 1384, 18:35 عصر
ابتدا بگم که استفاده از Session مربوط به ASP کلاسیک می شد و در دات نت تنها به منظور حفظ سازگاری قرار داده شده و بسیار مورد استفاده ی کمی داره.
شی Context جایگزینی مناسب برای Session است.

و اما خوب دقت کنید:
مسلما در صفحات لوگین سایت های مختلف من جمله همین سایت، گزینه ی "من را به خاطر داشته باش" یا "ورود خودکار در بازدیدهای بعدی" رو دیدی.
زمانی که کاربر توسط روش تعیین اعتبار Forms Authentication تصدیق هویت میشه، یک Cookie (که اصطلاحا بهش Ticket گفته میشه و با همین نام هم در کلاس ها ظاهر و مورد استفاده قرار می گیره)، توسط برنامه نویس بر روی سیستم کاربر قرار می گیره.
این کوکی، یک زمان انقضا داره که باعث میشه پس از طی یک بازه ی زمانی که توسط برنامه نویس تعیین میشه، از روی سیستم کاربر حذف بشه.
زمانی که کاربر اقدام به درخواست صفحه ای کنه که اون صفحه برای دسترسی نیاز به تصدیق هویت داشته باشه (که این مورد در فایل Web.Config مشخص میشه)، ابتدا وجود این Ticket بر روی سیستم کاربر بررسی میشه و در صورتی که Ticket وجود داشت، کاربر مجاز به مشاهده صفحه ی درخواستی میشه.
همچنین رویداد Application_AuthenticateRequest که در فایل Global.asax وجود داره نیز در این زمان اتفاق می افته و بهترین مکان برای تعیین سطح دسترسی کاربر، این روال هست.
به عنوان مثال، اگر فرض کنیم که من به شکل زیر یک Ticket بر روی سیستم کاربر ایجاد کنم:


Dim k As New FormsAuthenticationTicket(1, "Behrouz", Now, DateTime.Now.AddMinutes(20), False, "myRoles")
Dim s As String = FormsAuthentication.Encrypt(k)
Dim c As New HttpCookie(FormsAuthentication.FormsCookieName, s)
Response.Cookies.Add(c)

به شکل زیر قادر به استفاده از Ticket و بازیابی مقادیر ذخیره شده در آن هستم:


If Context.Request.IsAuthenticated Then
Dim o As FormsIdentity
o = CType(context.User.Identity, FormsIdentity)
Response.Write(o.Name & Environment.NewLine)
Response.Write(o.Ticket.UserData)
End If

زمانی که کاربر وارد سایت شما میشه، یک زمینه کاری یا Context به اون نسبت داده میشه.
دستور Context.Request.IsAuthenticated سیستم کاربر را برای وجود یک Ticket بررسی می کند و در صورت پیدا شدن، مقدار True و در غیر اینصورت مقدار False را بر می گرداند.
بنابراین، تعیین وجود Ticket، به طور خودکار برای شما انجام می پذیرد و در صورت وجود، کاربر مجاز به مشاهده صفحه درخواستی است و در غیر اینصورت، به صورت خودکار به فرمی که در فایل Web.Config در جلوی عبارت loginUrl نوشته شده هدایت خواهد شد.
موفق باشید.

kochol
چهارشنبه 30 شهریور 1384, 22:02 عصر
سلام
خیلی ممنون از جواب شما
من داشتم بررسی می کردم و کد شما را استفاده کردم ولی اصلا دیگه سایت بالا نمی اید وقتی از این کد استفاده می کنم

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
' Fires upon attempting to authenticate the use
If Context.Request.IsAuthenticated Then
Dim o As FormsIdentity
o = CType(Context.User.Identity, FormsIdentity)
FormsAuthentication.RedirectFromLoginPage(o.Ticket .UserData, True)
End If
End Sub

saeid taheri
دوشنبه 10 مهر 1385, 23:46 عصر
ببخشید من یک سوال در مورد تعیین هویت بعد از انتخاب تیک حفظ داشتم

اگر شخصی وارد سایت شود و لوگین کند و تیک حفظ شود را انتخاب کند
چطور می شود بعد از چند روز که این شخص مجددا وارد سایت می شود فهمید که او admin است یا user ?

با تشکر از شما اساتید

لوک خوش شانس
سه شنبه 11 مهر 1385, 01:11 صبح
من فکر می کنم تعین سطح دسترسی یا همان گروه کاریه یوزر از روی یوزر نیم که از کوکی برداشته شده دوباره از دیتابیس درخواست میشود .

saeid taheri
سه شنبه 11 مهر 1385, 17:34 عصر
آیا راه دیگری وجود ندارد که از دیتابیس استفاده نشود؟

لوک خوش شانس
سه شنبه 11 مهر 1385, 19:04 عصر
اگر هم وجود داشت فکر نمی کنم منطقی باشه .
البته همون طوری که شما یوزر نیم و پسورد رو ذخیره می کنی میتونی گروه کاری رو هم ذخیره کنی ولی به نظر من صحیح نیست .

حالا شاید اساتید دیگه نظر بهتری داشته باشن

saeid taheri
سه شنبه 11 مهر 1385, 21:12 عصر
من از راهنمایی و توجه شما تشکر می کنم

Behrouz_Rad
پنج شنبه 13 مهر 1385, 11:07 صبح
در UserData نقش کاربر رو نگهداری کن.
در روال AuthenticatedRequest فایل Global.asax نیز باید کوکی رو بخونی و نقش های کاربر رو به پارامتر دوم کلاس GenericIdentity نسبت بدی. نیازی به مراجعه ی مکرر به دیتابیس نیست.

موفق باشید.

لوک خوش شانس
شنبه 15 مهر 1385, 00:48 صبح
یعنی وقتی که یوزر Login میکنه نیازی نیست که از دیتابیس تعیین سطح دسترسی رو برداشت ؟ منظور شما اینه که تمام اطلاعات یوزر رو داخل کوکی نگه داری بشه ؟
یا این که منظور شما بعد از لوگین کردن هست که در این صورت خوب همون پست شماره 6 من میشه .
یکم بیشتر توضیح بدهید که برای من هم روشن شود ...

saeid taheri
شنبه 15 مهر 1385, 20:03 عصر
آقای راد اگر میشه یک مثال با vb.net بزنید
من ممنون می شوم

houtanal
شنبه 15 مهر 1385, 20:29 عصر
در برنامه های اینترانتی integrated windows authentication می تونه انتخاب بسیار مناسبی باشه.
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/523ae943-5e6a-4200-9103-9808baa00157.mspx?mfr=true