PDA

View Full Version : Forms Authentication



omid_Ahmadi
جمعه 30 بهمن 1383, 16:50 عصر
سلام.
من یک Web Application با C# نوشتم و در قسمت WebConfig کلید Authentication mode را با مقدار Forms ست کردم و مقدار loginUrl رو هم صفحه Login.aspx قرار دادم. یگ صفحه هم به نام First.aspx تشکیل دادم و به عنوان Startup تعیین کردم و در صفحه Login.aspx هم یک Button برای کاربران جدید قرار دادم تا به صفحه NewUser.aspx رفته و یک کاربر جدید تعریف کنند و در کد این این کلید از دستور Response.Redirect("NewUser.aspx") استفاده کردم. این کد هنگام اجرای برنامه اجرا میشود ولی مجددا برنامه به صفحه Login.aspx برمیگردد. یعنی تا کاربر Authenticate نشده است برنامه از صفحه Login.aspx خارج نمیشود. لطفا مرا راهنمایی کنید.

با تشکر.

Behrouz_Rad
جمعه 30 بهمن 1383, 18:18 عصر
این سوال بسیاری از کسانی است که با ASP.NET کار می کنند.
به طور پیش فرض، عمل تعیین اعتبار به تمامی صفحات اعمال می شود.
برای آنکه دسترسی به یک صفحه را بدون ارسال کاربر به صفحه لوگین میسر سازید، در فایل Web.Config به شکل زیر عمل کنید:


<configuration>
<system.web>
<authentication mode="Forms" />
</system.web>

<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration>

در جلوی خاصیت Path، نام صفحه ای را که برای دیدن آن نیاز به عمل تعیین اعتبار نیست، بنویسید.
موفق باشید.

saeed_programer
دوشنبه 03 اسفند 1383, 09:57 صبح
سلام
من یک مشکل دیگه دارم با Forms Authentication و اون اینه که وقتی کاربر login میکنه و کاربر وارد میشه دیگه زمان آن به پایان نمی رسه و حتی اگر کابر بیرون بیاید کاربر دیگر هم بدون login وارد میشه
در ضمن و از کوکی استفاده کردم

M.GhanaatPisheh
دوشنبه 03 اسفند 1383, 11:54 صبح
دوست عزیزم Log Out رو فراموش نکن.

Behrouz_Rad
سه شنبه 04 اسفند 1383, 06:45 صبح
در Web Application های معتبر معمولا پس از انجام عمل لوگین به کاربر اجازه ی ورود مجدد به صفحه لوگین تا زمانی که کاربر Sign Out نکرده باشد داده نمی شود. به عنوان مثال همین سایت برنامه نویس.
Cache را در صفحه لوگین غیر فعال کنید و در Form_Load چک کنید که آیا کاربر دارای Session است یا عملیات تصدیق هویت در مورد او اجرا شده یا خیر. (IsAuthenticated)
موفق باشید.

omid_Ahmadi
سه شنبه 04 اسفند 1383, 06:49 صبح
سلام
اگر موقع استفاده از FormsAuthentication.RedirectFromLoginPage() پارامتر createPresistentCookie رو False قرار بدی حتی اگر کاربر بدون SignOut خارج بشه هم کاربر بعدی مجبور به SignIn میشه ولی اگر این پارامتر رو True قرار بدی باید حتما قبل از خروج کاربر از FormsAuthentication.SignOut() استفاده کنی.

hamhik
جمعه 24 فروردین 1386, 16:49 عصر
من از این دستور استفاده می کنم
FormsAuthentication.SignOut()
اما وقتی که کاربر برروی دکمه signout می زنه خارج نمی شه یعنی اگه کاربر بخواد باز بدون لاگین وارد شه می تونه وارد بشه البته تا وقتی که پنجره ie رو نبسته باشه من مقدار کوکی رو هم false قرار دادم
چرا این دستور جواب نمی ده؟؟؟

hamed_bostan
جمعه 24 فروردین 1386, 18:26 عصر
سلام
اگر موقع استفاده از FormsAuthentication.RedirectFromLoginPage() پارامتر createPresistentCookie رو False قرار بدی حتی اگر کاربر بدون SignOut خارج بشه هم کاربر بعدی مجبور به SignIn میشه ولی اگر این پارامتر رو True قرار بدی باید حتما قبل از خروج کاربر از FormsAuthentication.SignOut() استفاده کنی.


میشه توضیح بدین فرق true بودن یا false بودن این در چیه؟

hamhik
جمعه 24 فروردین 1386, 21:44 عصر
اگه false باشه کاربر دفعه ی بعدی که می خواد بیاد تو سایت باید یوزر و پسورد رو وارد کنه
اگه true باشه دیگه کاربر همچنان تو سایت می مونه حتی اگه از سایت خارج بشه در واقع تا زمانی تو سایت می مونه که برای زمان کوکی در نظر گرفتیم

Alireza_Salehi
جمعه 24 فروردین 1386, 23:21 عصر
مطلبی که hamhik گفت درسته ، ولی یه نکته تکمیلی بگم:

کلاس FormsAuthenticationTicket خاصیتی به نام isPersistent داره که اگر true باشه زمان منقضی شدن این تیکت میشه زمان حال به اضافه 50 سال و اگر false باشه زمان انقای اون میشه زمان حال به اضافه خاصیت timeout که بر حسب دقیقه هست.

کلاس HttpCookie هم یک خاصیت Expire داره که اگر به اون مقدار ندیم زمان انقضای کوکی تا پایان Session جاری هست (تا وقتی مرورگر بسته بشه) و اگر به اون مقدار بدیم زمان انقضای اون میشه تاریخ وساعتی که در خاصیت Expire مشخص کردیم.

در تنظیمات FormsAuthentication هم خاصیتی به نام slidingExpiration وجود داره که اگر true باشه با هر در خواست جدید زمان انقضای کوکی به روز میشه (یعنی رو باره ریست میشه).

در واقع وقتی خاصیت isPersistent در حالت fasle باشه مقدار خاصیت timeout تیکت رو به خاصیت Expire کوکی نسبت میدن و اگر true باشه چیزی به خاصیت Expire نسبت نمیدن تا با بسته شدن مرورگر کوکی منقرض بشه.این خاصیت createPersistentCookie این طوری عمل میکنه.

hamhik
جمعه 24 فروردین 1386, 23:47 عصر
من فکر کنم یه سوالی بالا پرسیده بودم...

hamed_bostan
شنبه 25 فروردین 1386, 09:04 صبح
من از این دستور استفاده می کنم
FormsAuthentication.SignOut()
اما وقتی که کاربر برروی دکمه signout می زنه خارج نمی شه یعنی اگه کاربر بخواد باز بدون لاگین وارد شه می تونه وارد بشه البته تا وقتی که پنجره ie رو نبسته باشه من مقدار کوکی رو هم false قرار دادم
چرا این دستور جواب نمی ده؟؟؟

دوستمون راست می گن من پر رو پر رو اومدم سوالم رو یه دفعه وسط سوال ایشون پرسیدم . اقا شرمنده . ضمنا منهم این مشکل رو دارم که وقتی signout() می کنم باز هم کاربر می تونه وارد بشه.کوکی هام هم روی browser ام غیر فعال نیست

Alireza_Salehi
شنبه 25 فروردین 1386, 09:14 صبح
اصولا نباید مشکلی وجود داشته باشه ، این نکته رو هم بگم که این متد فقط تیکت موجود در کوکی رو منقضی میکنه نه خود کوکی رو ، یعنی اگر به هر دلیلی قبل از منقضی شدن کوکی کسی یا چیزی تاریخ منقضی شدن تیکت رو ریست کنه انگار که اصلا خارج نشدید!
(Reply attack)


کدتون رو بذارید ببینیم مشکل از کجاست ، این طوری که نمیشه فهمید.

hamhik
یک شنبه 26 فروردین 1386, 22:35 عصر
من از این مقاله استفاده کردم البته مقدار کوکی که true بود رو false کردم بقیه رو دست نزدم
http://www.codeproject.com/aspnet/formsroleauth.asp