PDA

View Full Version : آموزش: رفتن به صفحه قبل بعد از لوگین



s.mahmood
یک شنبه 20 دی 1388, 01:49 صبح
سلام
همین طور که از اسم تاپیک معلوم میخوام آموزش redirect شدن کاربر بعد از لوگین به صفحه قبلی که داشته میدیده رو بزارم
این کار به سه روش انجام میشه

Method 1 – Using a static variable and UrlReferrer
Method 2 – Using Javascript
Method 3 – Using ViewState
خوب زیاد سرتون رو درد نمیارمو کدها رو میزارم

Method 1 – Using a static variable and UrlReferrer


C#‎
// static variable
static string prevPage = String.Empty;

protected void Page_Load(object sender, EventArgs e)
{
if( !IsPostBack )
{
prevPage = Request.UrlReferrer.ToString();
}

}

protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect(prevPage);
}
VB.NET
'static variable
Private Shared prevPage As String = String.Empty

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If (Not IsPostBack) Then
prevPage = Request.UrlReferrer.ToString()
End If
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Response.Redirect(prevPage)
End Sub


Method 2 – Using Javascript


C#‎
protected void Page_Load(object sender, EventArgs e)
{
Button2.Attributes.Add("onClick", "javascript:history.back(); return false;");
}

protected void Button2_Click(object sender, EventArgs e)
{

}

VB.NET

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Button2.Attributes.Add("onClick", "javascript:history.back(); return false;")
End Sub

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

End Sub


Method 3 – Using ViewState

C#‎
protected void Page_Load(object sender, EventArgs e)
{
if( !IsPostBack )
{
ViewState["RefUrl"] = Request.UrlReferrer.ToString();
}

}

protected void Button3_Click(object sender, EventArgs e)
{
object refUrl = ViewState["RefUrl"];
if (refUrl != null)
Response.Redirect((string)refUrl);
}

VB.NET


Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If (Not IsPostBack) Then
ViewState("RefUrl") = Request.UrlReferrer.ToString()
End If
End Sub


Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim refUrl As Object = ViewState("RefUrl")
If Not refUrl Is Nothing Then
Response.Redirect(CStr(refUrl))
End If
End Sub



من خودم از روش اول استفاده کردم اما این مدل با دستور Server.Transfer یکم مشکل داره
من از Request.QueryString استفاده کردم که خیلی خوبم جواب میده
برای استفاده به 2 تا صفحه نیاز داریم
صفحه 1 مثلا admin.aspx
و صفحه دوم که صفحه login.aspx هست.حتما تو این صفحه از کامپوننت login استفاده کنید
این کدها مربوط به صفحه admin.aspx هست:


protected void Page_Load(object sender, EventArgs e)
{
if (User.IsInRole("admin") == false)
{
string url = "login.aspx?";
url += "go=" + "admin.aspx";
Server.Transfer(url);
}
}

واین کدها مربوط به صفحه login.aspx


protected void Page_Load(object sender, EventArgs e)
{
Login1.DestinationPageUrl = Request.QueryString["go"];
}
امیدوارم که این آموزش مورد توجه قرار گرفته باشه.
منبع قسمت اول آموزش سایت http://www.dotnetcurry.com هست
و قسمت دومم هم از خودم بود:لبخند:

mehdi.mousavi
چهارشنبه 23 دی 1388, 13:35 عصر
سلام همین طور که از اسم تاپیک معلوم میخوام آموزش redirect شدن کاربر بعد از لوگین به صفحه قبلی که داشته میدیده رو بزارم این کار به سه روش انجام میشه

سلام.
توی ASP.NET نیازی به این کارها نیستش و همه چی بطور خودکار کنترل میشه، فقط باید بدونید که چطور ازش استفاده کنید. لطفا به کتاب Pro ASP.NET 3.5 in C# 2008 مراجعه کنید.

موفق باشید.

حامد مصافی
چهارشنبه 23 دی 1388, 13:38 عصر
سلام.
توی ASP.NET نیازی به این کارها نیستش و همه چی بطور خودکار کنترل میشه، فقط باید بدونید که چطور ازش استفاده کنید. لطفا به کتاب Pro ASP.NET 3.5 in C#‎ 2008 مراجعه کنید.

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

در غیر اینصورت همه چیز بسته به کد نویسی شماست

mehdi.mousavi
چهارشنبه 23 دی 1388, 13:56 عصر
این در صورتیه که از امکانات اعتبار سنجی خود دات نت استفاده کنید. در غیر اینصورت همه چیز بسته به کد نویسی شماست

و حداقل یک دلیل منطقی بیارید که کسی نخواد از Membership Provider و ساز و کارهای موجود استفاده کنه. اونهمه Interface و Component طراحی شده رو نادیده بگیریم که بخواهیم یک Response.Redirect بنویسیم؟ اینکارو که تو Classic ASP هم انجام میدادیم...

موفق باشید.

Mostafa_Dindar
چهارشنبه 23 دی 1388, 14:08 عصر
این در صورتیه که از امکانات اعتبار سنجی خود دات نت استفاده کنید.


سلام . احتمالا منظورتون امکانات Authentication و Authorization میباشد . چون اعتبارسنجی بحث دیگریست .

موفق باشید .

حامد مصافی
چهارشنبه 23 دی 1388, 16:35 عصر
و حداقل یک دلیل منطقی بیارید که کسی نخواد از Membership Provider و ساز و کارهای موجود استفاده کنه. اونهمه Interface و Component طراحی شده رو نادیده بگیریم که بخواهیم یک Response.Redirect بنویسیم؟ اینکارو که تو Classic ASP هم انجام میدادیم...

موفق باشید.

یک دلیل: عدم امکان پرس جو از شرایط پروفایل




سلام . احتمالا منظورتون امکانات Authentication و Authentication میباشد . چون اعتبارسنجی مبحث دیگریست .

موفق باشید .

تا وقتی که فرهنگستان زبان فارسی ترجمه ای برای آن معین نکرده باشد هیچ مبحث دیگری نیست. هر کسی بنا به سلیقه ترجمه ای ارائه داده است.

mehdi.mousavi
پنج شنبه 24 دی 1388, 16:25 عصر
یک دلیل: عدم امکان پرس جو از شرایط پروفایل

متوجه نمیشم. میشه لطفا اندکی واضحتر بیان کنید؟

s.mahmood
جمعه 25 دی 1388, 13:52 عصر
سلام.
توی ASP.NET نیازی به این کارها نیستش و همه چی بطور خودکار کنترل میشه، فقط باید بدونید که چطور ازش استفاده کنید. لطفا به کتاب Pro ASP.NET 3.5 in C#‎ 2008 مراجعه کنید.

موفق باشید.

سلام
این کتاب رو نخوندم:ناراحت:
میشه بگید چطور میشه تو asp.net بدون نوشتن این کدها بعد از لوگین به یه صفحه دلخواه رفت.اگر جز این سه روش روش دیگه ای هم هست بگین بدونیم:متفکر:


و حداقل یک دلیل منطقی بیارید که کسی نخواد از Membership Provider و ساز و کارهای موجود استفاده کنه. اونهمه Interface و Component طراحی شده رو نادیده بگیریم که بخواهیم یک Response.Redirect بنویسیم؟ اینکارو که تو Classic ASP هم انجام میدادیم...

یکیش این که اینها همه آماده هستن اما کامل نیستن
مثلا کامپوننت لوگین قسمتی برای کد امنیتی نداره پس ..
یا قسمتی برای redirect کردن (به غیر از DestinationPageUrl)

Mostafa_Dindar
جمعه 25 دی 1388, 14:21 عصر
سلام



مثلا کامپوننت لوگین قسمتی برای کد امنیتی نداره پس ..

پس Login-Control-with-CAPTCHA.aspx
(http://aspnet.4guysfromrolla.com/articles/060706-1.aspx)


یا قسمتی برای redirect کردن (به غیر از DestinationPageUrl)

چرا DestinationPageUrl نه ؟

s.mahmood
جمعه 25 دی 1388, 16:00 عصر
چون خود برنامه نویس باید به DestinationPageUrl مقدار بده
مسلما خودش که اتوماتیک تغییر نمیکنه
من میگم اگر روش دیگه ای وجو داره که بشه این کارو انجام داد بگید:چشمک:؟

http://aspnet.4guysfromrolla.com/articles/060706-1.aspx
جالب بود
منم خودم از CAPTCHA ای که دوستمون تو فروم گذاشته استفاده کردم
دلیلش اینکه خود vs اینو آماده نداره


دلیل دیگه اینکه کدهای کامپوننت های آماده همیشه یکی هست.این ما هستیم که با کد نویسی اونا رو تغییر میدیم و سلیقه خودمون رو توش اعمال می کنیم
وگرنه هک شدن صفحه یا سایت حتمیه

bahar_engineer
جمعه 25 دی 1388, 16:20 عصر
با این دستور کاربر می ره به صفحه ای که قبل از لاگین از اون اومده. نیازی هم نیست که از membership استفاده کرده باشید.



Response.Redirect(Request.ServerVariables["HTTP_REFERER"]);
چقدر کار رو پیچیده می کنید!!!

حامد مصافی
شنبه 26 دی 1388, 10:10 صبح
با این دستور کاربر می ره به صفحه ای که قبل از لاگین از اون اومده. نیازی هم نیست که از membership استفاده کرده باشید.

Request.UrlReferrer در واقع نمونه ايجاد شده از نوع Url از HTTP_REFERER سرور است كه در پست اول ذكر شده است.

bahar_engineer
شنبه 26 دی 1388, 10:37 صبح
Request.UrlReferrer در واقع نمونه ایجاد شده از نوع Url از HTTP_REFERER سرور است که در پست اول ذکر شده است.

خوب من پست اول رو که دیدم خیلی پیچیده بود و اصلا نفهمیدم چی نوشتن

این راه حل شسته و رفته و بدون پیچیدگی مقصود رو می رسونه

مشکلی باهاش دارین؟

mehdi.mousavi
شنبه 26 دی 1388, 11:18 صبح
یکیش این که اینها همه آماده هستن اما کامل نیستن

سلام.
منظورتون از واژه "کامل" چیه؟ اتفاقا کاملا کامل هستن. این کدها با این نگاه نوشته شده اند، که هر کسی در صورت نیاز بتونه اونها را Extend کنه. در واقع Extensible هستن. اگر Captcha نداره، خودتون میتونید بهش اضافه کنید. اما بصرف اینکه Captcha (یا هر قابلیت دیگه ای) نداره بخواهید بشینید از نو همه این کدها رو بنویسید (تازه اگر بتونید همچین کاری کنید)، کار معقولی بنظر نمیرسه!

موفق باشید.

s.mahmood
شنبه 26 دی 1388, 12:51 عصر
اما بصرف اینکه Captcha (یا هر قابلیت دیگه ای) نداره بخواهید بشینید از نو همه این کدها رو بنویسید (تازه اگر بتونید همچین کاری کنید)، کار معقولی بنظر نمیرسه!

استفاده از یه کنترل یه بحث و اضافه کردن یک قابلیت به اون یه بحث دیگ هستش اما معلومه که نوشتن همچین کامپوننتهایی از اول معقولانه نیست بلکه احمقانه هم هست.
موضوع این تاپیک صرفا یک آموزش ساده بود
جای این همه بحث نداره:چشمک:

mehdi.mousavi
شنبه 26 دی 1388, 14:02 عصر
معلومه که نوشتن همچین کامپوننتهایی از اول معقولانه نیست بلکه احمقانه هم هست.

پس دلیل ارسال همچین پستی در وهله اول چی بوده؟ شما که میدونید انتخاب بهتری وجود داره، چرا روشهای شکننده رو می خواهید در قالب آموزش به دیگران القاء کنید؟

موفق باشید.

پاورقی: به اون برنامه نویسهای ساده دلی فکر کنید که روش شما رو می بینن و اونو بعنوان "روشی رسمی برای انجام این کار" انتخاب میکنن. دنبال DoEvents در این تالارها بگردید و ببینید برنامه نویسها (؟) چطور به اشتباه از اون استفاده میکنن و استفاده از این تابع چطور قارچ وار توسعه پیدا کرده... اینها همه بخاطر عدم داشتن دانش فنی برای انجام صحیح یک کار بوده...

s.mahmood
یک شنبه 27 دی 1388, 14:32 عصر
دوست گلم آقای "mehdi.mousavi"

پاورقی: به اون برنامه نویسهای ساده دلی فکر کنید که روش شما رو می بینن و اونو بعنوان "روشی رسمی برای انجام این کار" انتخاب میکنن. دنبال DoEvents در این تالارها بگردید و ببینید برنامه نویسها (؟) چطور به اشتباه از اون استفاده میکنن و استفاده از این تابع چطور قارچ وار توسعه پیدا کرده... اینها همه بخاطر عدم داشتن دانش فنی برای انجام صحیح یک کار بوده...
لازم بگم قبل از گذاشتن این آموزش اینترنت رو به خوبی جستجو کردم و با روش های متعددی برخورد کردم
فکر کنم شما اصلا اولین پست رو نخوندید:متفکر:
من سعی کردم اکثر روش ها رو بزارم در ضمن این آموزش منبع داره!! منم یکی از روشهایی که خودم استفاده کردم رو نوشتم حتی روش استفاده از session هم بود .اون برنامه نویس های (؟) هم باید همون برنامه های (؟) رو توسعه بدن.
درسته؟


پس دلیل ارسال همچین پستی در وهله اول چی بوده؟ شما که میدونید انتخاب بهتری وجود داره، چرا روشهای شکننده رو می خواهید در قالب آموزش به دیگران القاء کنید؟
خوب اگر بلدید بگید.منتظرید vs2012 بیاد بعد بگید؟:لبخند:

Mostafa_Dindar
یک شنبه 27 دی 1388, 15:18 عصر
دوست گلم آقای "mehdi.mousavi"

لازم بگم قبل از گذاشتن این آموزش اینترنت رو به خوبی جستجو کردم و با روش های متعددی برخورد کردم
فکر کنم شما اصلا اولین پست رو نخوندید:متفکر:
من سعی کردم اکثر روش ها رو بزارم در ضمن این آموزش منبع داره!! منم یکی از روشهایی که خودم استفاده کردم رو نوشتم حتی روش استفاده از session هم بود .اون برنامه نویس های (؟) هم باید همون برنامه های (؟) رو توسعه بدن.
درسته؟


خوب اگر بلدید بگید.منتظرید vs2012 بیاد بعد بگید؟:لبخند:

سلام .

ببین دوست من . مبحث تاپیک داره لوث میشه . اینجا یک مکان علمی هست پس باید به صورت علمی هم حرف بزنیم وگرنه به بيراهه ميريم . همه افراد که در یک سطح نیستند و منطقی هم نیست که باشند . عده ای با تجربه ترند و عده ای هم کم تجربه تر و این هیچ جای کسر شانی نیست .

وقتی بحث علمی هست دیگه کل کل نیست . هر گاه دیگری مطلبی رو درست تر از ما گفت باید بپذیریم .

بله دات نت خیلی چیزها رو برای ما فراهم کرده که یاد گرفتن اونها مستلزم صرف هزینه زمان برای یادگیری هست و در بعضی مواقع اونها نیازهای ما رو که خاص هستند برآورده نمیکنند . که بهتره خودمان اونها رو پیاده سازی کنیم . درسته كه گفته میشه که خودتون رو بیش از حد به Platform وابسته نکنید ولی تا چه حد ؟

به طور مثال مایکروسافت DetailsView وFormView رو برای ویرایش و درج رکورد پیشنهاد داده ولی خیلی ها اونو قبول ندارند و از اون استفاده نمیکنند .

ولی مبحث Memebership یکی از مواردی بوده که مایکروسافت به خوبی به آن پرداخته به طوری که اکثر برنامه نویسان اون رو بسیار موفق دانستند و جايي براي حرف نمونده .

پس محبت كنيد به این شیوه بحث پایان بدین .

ممنونم از شما