PDA

View Full Version : جلوگبری ار اجرای کد با زدنback مرورگر



sanaz.dadkhah
دوشنبه 22 اردیبهشت 1393, 17:09 عصر
سلام
موقعی که من دستوری را اجرا می کنم و پس از اجرای آن به صفحه دیگه ای با Responce.Redirect کاربر را هدایت می کنم اگر back مرورگر زده بشود دوباره دستور را اجرا می کند برای جلوگیری از این عمل چکاری باید انجام بدهم؟

meisam12
دوشنبه 22 اردیبهشت 1393, 17:15 عصر
کد زیر را در رویداد Page_Load صفحه مورد نظرت بنویس

if (!IsPostBack)
{
Session["PostID"] = "1001";
ViewState["PostID"] = Session["PostID"].ToString();
}
else
{
if (ViewState["PostID"] == null)
Response.Redirect(HttpContext.Current.Request.Url. AbsoluteUri);

if (ViewState["PostID"].ToString() == Session["PostID"].ToString())
{

Session["PostID"] = (Convert.ToInt16(Session["PostID"]) + 1).ToString();

ViewState["PostID"] = Session["PostID"].ToString();

}
else
{
Response.Redirect(HttpContext.Current.Request.Url. AbsoluteUri);
}
}

sanaz.dadkhah
دوشنبه 22 اردیبهشت 1393, 19:06 عصر
میشه لطف کنید و ی توضیح مختصر بدهین؟

meisam12
دوشنبه 22 اردیبهشت 1393, 20:00 عصر
زمانی که صفحه Load می شود به ازای هر کاربر یک Session ایجاد می شود و اگر صفحه به هر نحوی Undo شود( Undo,Refresh,... ) آنگاه هر کدی که در آن صفحه می باشد آنها همگی مجدداً اجرا می شوند برای جلوگیری از حوزه متغیر Session , ViewState استفاده می کنیم .
1- در ابتدا که صفحه Load می شود یا بهتره بگم که PostBack نشده است باعث می شود که ما یک متغیر به نام PostID در ViewState,Session بسازیم و یک مقدار دلخواه درون این دو متغیر قرار می دهیم.
2- اگر صفحه Undo شد مقدار ViewState و Session برابر نیست چون Undo شده است مقدار ViewState هم به مقدار قبلی بر می گردد و دیگر با Session برابر نیست پس من صفحه را Refresh کردم.


else {
Response.Redirect(HttpContext.Current.Request.Url. AbsoluteUri);
}