PDA

View Full Version : سوال: راهنمایی برای خروج از سایت



imanasp
یک شنبه 22 آذر 1388, 13:57 عصر
سلام
من تو سایت سرچ کردم و راهنماییهای بعضی از اساتید رو به کار بردم ولی باز هم وقتی خروج از سایت میزنم بازم با دکمه Back مرورگر به همون صفحه که فقط کاربری که لاگین کرده و حق دیدن اون صفحه رو داره بر میگرده و sign out کامل نمیشه من از session استفاده می کنم و تا حالا این کدها رو استفاده کردم :

System.Web.Security.FormsAuthentication.SignOut();
Response.Redirect("AdminLogin.aspx"); یا:

Session["loged"] = null; یا:

Session.Clear();لطفا راهنمایی کنید
متشکرم

hashemi85sep
یک شنبه 22 آذر 1388, 14:13 عصر
سلام دوست عزیز
توی page_load صفحه هاییی که کاربر دسترسی داره این کد رو بنویس فکر کنم جواب بده ..


if (!Page.IsPostBack)
{

}

و سشن خودتون رو توی این دستور چک کنین...
البته فکر کنم درست باشه..
اگر هم اشتباه بود به بزرگواری خودتون ببخشید:لبخندساده:

imanasp
یک شنبه 22 آذر 1388, 14:28 عصر
ممنون این کار رو هم کردم

if (!Page.IsPostBack)
{
if ((Session["uId"] != null))
{
lblLoginUser.Text = Session["userName"].ToString() + " عزیز به سایت خوش آمدید!";

}
else
{
Response.Redirect("AdminLogin.aspx");
}
}

z_bluestar
یک شنبه 22 آذر 1388, 14:38 عصر
چـرا از کلاس Forms.Authentication خود ASP.Net استفاده نمی کنید ؟؟؟
انوقت کنترل کـاربران و صفحاتی که نیاز به Login دارند خیلی آسان تر می شه

تو این تاپیک طرز استفاده از این کلاس توضیح داده شده .

http://barnamenevis.org/forum/showthread.php?t=178065

imanasp
یک شنبه 22 آذر 1388, 15:58 عصر
چـرا از کلاس Forms.Authentication خود ASP.NET استفاده نمی کنید ؟؟؟
انوقت کنترل کـاربران و صفحاتی که نیاز به Login دارند خیلی آسان تر می شه

تو این تاپیک طرز استفاده از این کلاس توضیح داده شده .

http://barnamenevis.org/forum/showthread.php?t=178065
توی اون تایپیک از چک باکس "مرا به خاطر بسپار" استفاده شده که من تو پروژم نیاز ندارم دستور:

FormsAuthentication.RedirectFromLoginPage("UsrerNa me", chkLoginRemember.Checked);
کوکی و یک رشته لازم داره که من فقط اسم رشته رو دادم من این قسمت رو متوجه نشدم میشه بیشتر توضیح بدید؟
چرا باید کوکی استفاده کنم؟

z_bluestar
یک شنبه 22 آذر 1388, 16:20 عصر
میشه دقیق تر بگید کجاشو متوجه نمی شین ؟؟؟؟
در دستور بالا شمــا نام کـاربر و اینکه می خواهید سایت نام کاربر رو به خاطر بسپار یا نه رو به این متد می دهید و این متد نام کاربر رو بعنوان نام کاربری که Log in می باشد نگه می داره و در هر فرمی از برنامه تون که خواستید می تونید چک کنید یا نام کاربر را بدست بیارید .

این اطلاعات هم در cookie که در Web.Cinfig معرفی کردید نکه داری می شه

در ضمن این متد FormsAuthentication در جایی استفاده می شه که شمــا وارد صفحه ای شده اید که نیاز به Login داشته وAsp شمـا رو با توجه به تنظیمات در Web.Config به این صفحه هدایت کرده و پس Login دوباره به اون صفحهای که قبل از Login در آن بوده اید بر می گرداند.

این کلاس متدهای زیادی داره که بهتره در موردش در اینترنت Search نید

meysampaknahad
یک شنبه 22 آذر 1388, 22:30 عصر
سلام
دوست عزیز شما می تونید با دستور زیر موقع خروج کاربر سشن مورد استفاده رو ببندی:

Session.Abandon();

این طوری درسته که با زدن دکمه Back به صفحه قبلی بر می گرده ولی اگه بخاد تویه اون صفحه کاری انجام بده چون Session بسته شده و کاربر تعیین هویت نشده صفحه اجرا نمیشه و مثلاً به صفحه ی دیگه ای مثل صفحه Login منتقل میشه.

meysampaknahad
یک شنبه 22 آذر 1388, 22:33 عصر
سلام
یه راه دیگه هم برای حل کردن مشکلت وجود داره و اون غیر فعال کردن دکمه Back در صفحه مورد نظر هست .
می تونی از کد زیر استفاده کنی.

protected override void OnPreRender(EventArgs e)
{
//در مرورگرBackغیر فعال کردن دکمه
base.OnPreRender(e);
string sb;
sb = "<Script language=javascript>\n";
sb += "window.history.forward(1);\n";
sb += "\n</script>";
Page.RegisterClientScriptBlock("clientScript" , sb);
}

imanasp
یک شنبه 22 آذر 1388, 23:30 عصر
از راهنماییتون متشکرم
کد غیرقعال کردن دکمه Back رو تست کردم درست کار می کنه ممنونم
ولی
Session.Abandon(); رو امتحان کردم و صفحه بر می گرده و میتونی مثل زمانی که کاربر لاگین کرده به راحتی کار کنی و چیزی رو قفل نمی کنه!

z_bluestar
دوشنبه 23 آذر 1388, 09:54 صبح
شما داری History رو پاک می کنید و اگه تایپ کنه و لینک کنه دوباره بر می گرده به آون صفحه ای که بوده و این روش درستی نیست .
مخصوصا اینکه از کد های Client Side استفاده می شه و با غیر فعــال کردن JavaScript می شه این راه موقتی رو هم دور زد .

برای Authentication همیشه از کدهای Server Side استفاده کنید .

اگه از روشی که گفتم استفاده کنید می تونید در Page_Load هر Page با این کد Login بودن کاربر رو چک کنید و اگه نبود به صفحه مورد نظر هدایتش کنید .

protected void Page_Load(object sender, EventArgs e)
{
if (HttpContext.Current.User.Identity.Name == string.Empty)
{
Response.Redirect("~/Login.aspx");
}
}

البته یه کـار آسون تری هم هست اگه خواستید بهتون می گم .

meysampaknahad
دوشنبه 23 آذر 1388, 11:05 صبح
دوست عزیز راهی که شما اشاره کردید درسته و خوبم کار می کنه ولی استفاده از کنترل های خود دات نت برای لوگین دردسرهای زیادی هم داره که به نظر من نمی ارزه .

meysampaknahad
دوشنبه 23 آذر 1388, 11:10 صبح
از راهنماییتون متشکرم
کد غیرقعال کردن دکمه Back رو تست کردم درست کار می کنه ممنونم
ولی
Session.Abandon(); رو امتحان کردم و صفحه بر می گرده و میتونی مثل زمانی که کاربر لاگین کرده به راحتی کار کنی و چیزی رو قفل نمی کنه!


دوست عزیز شما باید در Page_load صفحه مربوطه چک کنید ببینید آیا Session معتبر هست یا نه و اگر نبود باید مثل کد زیر عمل کنید :


if (Session["owner"] != "Managers")
{
Response.Redirect("~/login.aspx");
}

در اینجا مثلاً معیار من برای اعتبار سنجی متغیر Owner سشن هستش که اگه برابر یه مقدار خاصی مثل Managers نباشه یعنی کاربر لوگین نکرده و میخاد مستقیماً به صفحه مورد نظر وارد بشه که بهش اجازه داده نخواهد شد.

imanasp
دوشنبه 23 آذر 1388, 13:21 عصر
البته یه کـار آسون تری هم هست اگه خواستید بهتون می گم .
ممنون میشم کمکم کنید

imanasp
دوشنبه 23 آذر 1388, 13:32 عصر
جناب meysampaknahad (http://barnamenevis.org/forum/member.php?u=46201) توی پست سوم من این کد رو گذاشتم توی page_load تمام صفحه هام این شرط رو بررسی می کنم روال کار هم به این صورته که یه سلکت به بانک میزنم و بعد و در صورت وجود کاربر id اون رو تو سشن ذخیره می کنم این که خیلی سادست شما خودتون کدتون رو تست کنید می بینید که اگه کاربر تو آدرس مرورگر تایپ کنه و لینک کنه صفحه ای که از اون خارج شده دوباره واردش میشه و تمام امکانات بدون قفل شدن براش ظاهر میشه!

z_bluestar
دوشنبه 23 آذر 1388, 15:56 عصر
یه فولدر در پروژه ایجاد کرده و صفحاتی که نیاز به Login دارد را در آن قرار بدهید و یه Web.Config به فولدر هم اضافه کنید و این کد را درآن وارد کنید .

<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>

بعد این تنظیمات رو هم در Web.Config اصلی پروژه تون انجام بدید .

<authentication mode="Forms">
<forms name=".authentication" loginUrl="~/Login.aspx" timeout="15" defaultUrl="~/Default.aspx" >
</forms>
</authentication>

بعد برای Login از این کد استفاده کنید

FormsAuthentication.RedirectFromLoginPage(txtUsern ame.Text.Trim(), false);

انوقت اگه کاربری بخواد به هر روشی یه صفحه ای که نیاز به Login را داره ببینه به صفحه Login هدایت می شه و پس از Login اتوماتیک به همون Page برمی گرده

z_bluestar
دوشنبه 23 آذر 1388, 16:03 عصر
دوست عزیز راهی که شما اشاره کردید درسته و خوبم کار می کنه ولی استفاده از کنترل های خود دات نت برای لوگین دردسرهای زیادی هم داره که به نظر من نمی ارزه .

میشه بگید دلیل تون چیه ؟؟ و این کنترل ها چه دردسر هایی دارند ؟؟ :متفکر:

meysampaknahad
چهارشنبه 25 آذر 1388, 23:10 عصر
یکی از دلایلم حجم زیادیه که دیتابیس خود دات نت برای استفاده از امکانات لوگین ایجاد میکنه.
دلیل دیگه ، اینکه من چیز زیادی از نحوه نوشته شدن این کنترل ها ندارم و در واقع از امنیتش چیزی نمی دونم.
به نظرم اگه صفحات لوگین و امثال اون رو خودمون بنویسیم امنیتش هر چقدر هم که ضعیف باشه دست خودمونه .
ضمناً با یه سرچ ساده تویه گوگل میشه باگ های زیادی از کنترل های خود دات نت برای لوگین پیدا کرد.

meysampaknahad
چهارشنبه 25 آذر 1388, 23:14 عصر
جناب meysampaknahad (http://barnamenevis.org/forum/member.php?u=46201) توی پست سوم من این کد رو گذاشتم توی page_load تمام صفحه هام این شرط رو بررسی می کنم روال کار هم به این صورته که یه سلکت به بانک میزنم و بعد و در صورت وجود کاربر id اون رو تو سشن ذخیره می کنم این که خیلی سادست شما خودتون کدتون رو تست کنید می بینید که اگه کاربر تو آدرس مرورگر تایپ کنه و لینک کنه صفحه ای که از اون خارج شده دوباره واردش میشه و تمام امکانات بدون قفل شدن براش ظاهر میشه!


دوست عزیز من بارها کدم رو امتحان کردم و درست کار میکنه.
درسته که با زدن دکمه Back به صفحه قبلی بر می گرده ولی اگه اقدام به ارسال مطلب یا ایجاد تغییرات دیگه در اون صفحه بشه ، چون سشن مقدار نامعتبری رو داره بهش اجازه انجام تغییرات داده نمی شه و به صفحه لوگین کاربران Redirect میشه.
به نظرم یه جای کدتون درست نیست. صفحه تون رو Trace کنید.

z_bluestar
پنج شنبه 26 آذر 1388, 08:31 صبح
استفاده از این کــدها دلیل بر استفاده Login و dataBase خود asp.net نمی باشد !!!! .

شمــا به راحتی می تونید مدیریت کاربران را خودتان در DataBase خودتان بر عهده بگیرید و از این کلاس هم استفاده کنید و حتی کلاس RoleProvider خود net. را هم تغییر داده و سفارشی کنید که از DataBase شما بخونه.

اگر یک مقدار در همین سایت Search کنید می بینید وقتی امنیت را به داده های client _Side واگذار می کنیم , چقدر راحت می توان با غیر فعال کردن Script آنها نادیده گرفت.:متفکر:

meysampaknahad
پنج شنبه 26 آذر 1388, 10:30 صبح
بله درسته.
البته اگر شمام یه مقدار دقیقتر مطلبم رو بخونید می بینید که منظورم از نوشتن کدهای لوگین توسط خودمون کدنویسی Client_side نیست.:قهقهه:
ما می تونیم با برنامه نویسی Server_Side کدهای مربوط به این قسمت رو خیلی بهتر و دقیقتر از کدهای خود دات نت بنویسیم.

z_bluestar
پنج شنبه 26 آذر 1388, 11:07 صبح
سلام
یه راه دیگه هم برای حل کردن مشکلت وجود داره و اون غیر فعال کردن دکمه Back در صفحه مورد نظر هست .
می تونی از کد زیر استفاده کنی.

protected override void OnPreRender(EventArgs e)
{
//در مرورگرBackغیر فعال کردن دکمه
base.OnPreRender(e);
string sb;
sb = "<Script language=javascript>\n";
sb += "window.history.forward(1);\n";
sb += "\n</script>";
Page.RegisterClientScriptBlock("clientScript" , sb);
}

منظور منم از ClientSide این کد های شما بود تگ Script که اینجا قرار دادید و برای Authentication استفاده می کنید .

بعدشم اینجا ما اومدیم واسه بحث علمی . که به نظر من این بحث هم به نتیجه رسیده و هم تموم شده :تشویق:

mehdi.mousavi
پنج شنبه 26 آذر 1388, 11:30 صبح
یکی از دلایلم حجم زیادیه که دیتابیس خود دات نت برای استفاده از امکانات لوگین ایجاد میکنه.

سلام.
آحه این حرف یعنی چی؟ یعنی چی حجمش زیاده؟ یک User تعریف کنید، به اندازه تعریف یک User فضا میخواد. سه میلیون رکورد تعریف کنید، به اندازه 3 میلیون رکود فضا میخواد. اگر هم منظورتون تعداد جداولی هستش که برای Membership ساخته میشه، به اعتقاد من کاملا خوب و مناسبه. تنها ایراد از نظر من تو بخش Profile اش و نگهداری اطلاعات بصورت Bulk توی بانک هستش. بقیه موارد، کاملا خوب، بجا و درست هستش.


دلیل دیگه ، اینکه من چیز زیادی از نحوه نوشته شدن این کنترل ها ندارم و در واقع از امنیتش چیزی نمی دونم. به نظرم اگه صفحات لوگین و امثال اون رو خودمون بنویسیم امنیتش هر چقدر هم که ضعیف باشه دست خودمونه. ضمناً با یه سرچ ساده تویه گوگل میشه باگ های زیادی از کنترل های خود دات نت برای لوگین پیدا کرد.

آهان! پس وقتی چیز زیادی در مورد کنترلها و کارکرد اونها نمیدونید، چطور بخودتون جرات میدید که در مورد حجم بانک مربوطه صحبت کنید؟ ترس شما، بخاطر عدم داشتن دانش فنی در این زمینه هستش که میشه اونو با خوندن یک کتاب خوب در زمینه ASP.NET مرتفع کرد. وقتی یک کتاب خوب در این مورد بخونید، دیگه هرگز نمیگید "خودم بشینم و بنویسم، بهتره!". من کتاب ASP.NET 3.5 in C# 2008 نوشته Matthew MacDonald رو پیشنهاد میکنم. Chapter 21 در مورد Membership و هر آنچه که برای خوب استفاده کردن از Membership موجود در ASP.NET نیاز دارید رو بهتون آموزش میده.

موفق باشید.

meysampaknahad
پنج شنبه 26 آذر 1388, 13:48 عصر
منظورم از حجم زیاد حجم کل دیتابیس هستش که حدود 11MB میشه اونم بدون هیچ نوع اطلاعاتی که خودمون اضافه خواهیم کرد.
این کتابیم که فرمودید به طور کامل مطالعه کردم ولی نظرم همونیه که گفتم.

meysampaknahad
پنج شنبه 26 آذر 1388, 13:51 عصر
منظور منم از ClientSide این کد های شما بود تگ Script که اینجا قرار دادید و برای Authentication استفاده می کنید .

بعدشم اینجا ما اومدیم واسه بحث علمی . که به نظر من این بحث هم به نتیجه رسیده و هم تموم شده :تشویق:


بله حق با شماست . این بحث تموم شده:خجالت:

Mostafa_Dindar
پنج شنبه 26 آذر 1388, 13:59 عصر
منظورم از حجم زیاد حجم کل دیتابیس هستش که حدود 11MB میشه اونم بدون هیچ نوع اطلاعاتی که خودمون اضافه خواهیم کرد.
این کتابیم که فرمودید به طور کامل مطالعه کردم ولی نظرم همونیه که گفتم.

در صورتي كه ازنسخه express اس كيو ال استفاده كنيد حجمش در اون حد هست . ولي من حجم ديتابيسم همراه با جدولهاي MemberShip و همچنين داده هاي اون در sql 2005 نسخه developer اون كمتر از 5 مگا بايت هست !
اين حرف از كسي كه همچين كتابي رو خونده باشه بعيده .

meysampaknahad
پنج شنبه 26 آذر 1388, 16:13 عصر
دوست عزیز من از نسخه استاندارد اس کیو ال 2005 استفاده می کنم و دقیقاً 11 مگابایت فضا اشغال می کنه.
از نسخه Express هم بیزارم:افسرده:

mehdi.mousavi
جمعه 27 آذر 1388, 13:25 عصر
منظورم از حجم زیاد حجم کل دیتابیس هستش که حدود 11MB میشه اونم بدون هیچ نوع اطلاعاتی که خودمون اضافه خواهیم کرد. این کتابیم که فرمودید به طور کامل مطالعه کردم ولی نظرم همونیه که گفتم.

من واقعا نمیدونم این اعداد و ارقام رو از کجا میارید... من توی SQL Server 2008 آزمایش کردم، و حجم جداول Membership (و SP های مربوطه) فقط 458,752 بایت هستش. مطمئنا در نسخه 2005 هم نباید چندان تفاوتی داشته باشه...

در هر حال، من اینجا نیستم که بخوام نظر شما رو به هر قیمتی عوض کنم. اگر معتقد هستید که کدی که خودتون می نویسید، بهتر از کد Membership موجود هستش، خوب اینکارو کنید...