PDA

View Full Version : UrlReferrer Problem



majid_darab
پنج شنبه 30 مهر 1388, 17:55 عصر
با سلام و درود بر شما دوستان گرامی :

لطفاً پروژه زیر را دانلود نمایید. این پروژه یک پروژه فوق العاده ساده مربوط به Security می باشد.
دراین پروژه هدف من این است که وقتی وارد صفحه majid.aspx می شویم و روی لینک Login کلیک می کنیم پس از لاگین مجدداً به صفحه ی majid.aspx هدایت شویم.
اما
Request.UrlReferrer.ToString() درست عمل نمی کند و پس از لاگین کردن آدرس خود صفحه ی لاگین در UrlReferrer قرار می گیرد.
آیا کاربرد UrlReferrer در اینجاست و یا کابرد آن دراینجا نادرست است ؟
وامّا لینک دانلود کم حجم پروژه :
[http://www.speedyshare.com/453154465.html

hadi000333
جمعه 01 آبان 1388, 10:41 صبح
اشتباه شما اینه که در هنگامی صفحه پست بک می شه می خوایی referre رو چک کنی
خوب نتیجه همین صفحه جاری می شه
referre رو در viewState صفحه ت ذخیره کنی



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


بعد هر جا که خواستی بهش دسترسی داشته باشی


Response.Redirect(ViewState["Reffer"].ToString());

majid_darab
جمعه 01 آبان 1388, 16:59 عصر
با تشکر فراوان :
من تغییر زیرو در کد صفحه لاگین با توجه به راهنمایی شما اعمال کردم و همه چی درست شد .

namespace UrlReferrerProblem
{
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ViewState["Referrer"] = Request.UrlReferrer.ToString();
string str = ViewState["Referrer"].ToString();
}
}

protected void cvPassword_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = (txtUserName.Text == txtPassword.Text);
}

protected void btnLogin_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
if (Request.QueryString["ReturnURL"] != null)
{
FormsAuthentication.RedirectFromLoginPage(txtUserN ame.Text, chkRemember.Checked);
}
else
{
//string str = Request.UrlReferrer.ToString();
//Response.Redirect(Request.UrlReferrer.ToString());
Response.Redirect(ViewState["Referrer"].ToString());

}
}
}
}
}


قفط یک نکته و اون اینکه وقتی کد زیرو در صفحه ی majid.aspx قراردادم با exeption زیر روبرو شدم:
واما کد :

if (!Page.IsPostBack)
{
ViewState["Referrer"] = Request.UrlReferrer.ToString();
string str = ViewState["Referrer"].ToString();
}
واینم exeption :

Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

Line 15: if (!Page.IsPostBack)
Line 16: {
Line 17: ViewState["Referrer"] = Request.UrlReferrer.ToString();
Line 18: string str = ViewState["Referrer"].ToString();
Line 19: }


Source File: C:\URLReferrerProblem\UrlReferrerProblem\Majid.asp x.cs Line: 17

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.]
UrlReferrerProblem.Majid.Page_Load(Object sender, EventArgs e) in C:\Jalaseye 3 - e-shop\URLReferrerProblem\UrlReferrerProblem\Majid.a spx.cs:17
System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Cal lback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

hadi000333
شنبه 02 آبان 1388, 00:13 صبح
خوب همیشه باید استثنا ها رو هم در نظر گرفت شما وقتی می تونی Request.UrlReferrer داشته باشی
که صفحه جاری از طریق صفحه دیگری باز شده باشد.
منظورم اینه که از طریق آدرس بار وارد صفحه نشده باشی.
پس قبل از اینکه بخوایی مقدار رو در ViewState ذخیره کنی یا پس بگیری چک کن Request.UrlReferrer
مخالف null باشه یعنی صفحه referre داشته باشه

پس :

این شرط ها رو در نظر بگیر:


if(Page.Request.UrlReferrer!=null)



if (ViewState["Referrer"]!=null)

majid_darab
شنبه 02 آبان 1388, 00:57 صبح
با سلام و عرض تشکر بابت پاسخگویی و زحمتی که برای آن کشیدید...(hadi000333)
مشکل من دررابطه با این مشکل تماما حل شد و از این بابت از شما قدردانی می کنم.
وقتی چشمم به شرط if(Page.Request.UrlReferrer!=null) افتاد که در بالا اعلام فرمودید یاده موردی که چند روز پیش بهش برخوردم افتادم ...
این مورد شامل شرط ایفی بود که دارای دو قسمت است به قرار زیر :

if ((Request.QueryString["Mode"] != null)
&& (!Request.QueryString["Mode"].Equals(string.Empty)))
اما من موندم مگر نه اینکه دوشرط درون if یکسانند ، پس چرا در اینجا هر دوشرط استفاده شده است؟
درکجا باید از string.empty استفاده کرد و کجا null؟
باتشکّر
مجید داراب

m110_110
شنبه 02 آبان 1388, 09:11 صبح
با سلام
فکر می کنم این شرط بهتر باشه
من که دارم از این استفاده می کنم


if (!string.IsNullOrEmpty(Convert.ToString(Request.Ur lReferrer)))

majid_darab
شنبه 02 آبان 1388, 12:09 عصر
دست شما درد نکنه...
این کد عین کاری رو با کد اعلام شده می کند که resharper با کدها می کند...
به هر تقدیر خیلی تر و تمیز و available است...
اما باز مشخص نشد که فرق null با empty در چیه؟
با تشکر
مجید داراب

hadi000333
شنبه 02 آبان 1388, 21:33 عصر
تفاوت String با کلاس های دیگه اینه که نیازی به تعریف به صورت nullable نداره
و می تونه مقدار null رو داشته باشه
شاید نتونم خوب توضیح بدم
اما این کد کمک کنه :


string NullString = null;
string EmptyString = string.Empty;

if (NullString == string.Empty)
Response.Write("string is Empty");

if (EmptyString == null)
Response.Write("string is null");

نتیجه اینه که در خروجی چیزی چاپ نمی شه

تفاوت رو وقتی میشه بیشتر فهمید که بخوایی ToString کنی
خوب رشته ای که empty هست رشته خالی رو بر می گردونه اما
رشته ای که null هست با عث بروز خطا می شه.
چون null یعنی هیچی

spicirmkh
سه شنبه 24 آذر 1388, 13:18 عصر
اگر بخواهيم RedirectForm بجاي اينکه در webconfig بنويسم خودمان توي برنامه مشخص کنيم به کجا برود چه کنيم


FormsAuthentication.RedirectFromLoginPage(txtUserN ame.Text, chkRemember.Checked);

مهدی کرامتی
چهارشنبه 25 آذر 1388, 06:59 صبح
بجای فراخوانی متد FormsAuthentication.RedirectFromLoginPage متد FormsAuthentication.SetAuthCookie را فراخوانی کنید. این متد فقط کار Login کردن کاربر را انجام می دهد و او را به هیچ جا هدایت نمی کند، بنابراین میبایست پس از فراخوانی آن با اجرای متد Response.Redirect کاربر را به آدرس مورد نظر هدایت کنید.

spicirmkh
شنبه 28 آذر 1388, 13:22 عصر
من در صفحه Default.aspx يک لينک به صفحه login مي روم

اما دستور


if (!string.IsNullOrEmpty(Convert.ToString(Request.Ur lReferrer)))
{
ViewState["Referrer"] = Request.UrlReferrer.ToString();
string str = ViewState["Referrer"].ToString();
}


چرا مقدار آن هميشه UrlReferrer برابر null است ؟