PDA

View Full Version : سوال: عدم نمایش صفحه ی قبل، با زدن دکمه ی Back



hamedsabzian
چهارشنبه 02 تیر 1389, 12:19 عصر
با سلام خدمت دوستان برنامه نویس!

مشکلی که بنده دارم اینه که، وقتی توی سایتم Logout می کنم، با زدن دکمه Back در Browser دو باره می تونم صفحه ی قبل روببینم!
البته نمی شه کاری کرد، چون در واقع Session برای کاربری که خارج شده از بین روفته، ولی به هر حال ممکنه اطلاعات محرمانه ای توی اون صفحه نمایش داده بشه!
من می خوام با زدن Back نشه صفحه ی قبل رو دید (البته فقط در صورت خروج کاربر). راه حل چیه؟

نمی دونم با غیر فعال کردن قابلیت کش شدن صفحات در Browser می شه مشکل رو حل کرد، یا نه؟

البته فعلا برای این کار از Ajax استفاده می کنم، ولی می خوام بدونم راه اصولیش چیه؟

aminghaderi
چهارشنبه 02 تیر 1389, 14:13 عصر
سلام حمید جان
نیاز به استفاده از اجکس ندارید.
شما برای ورود به سایت یه متقیر دارید که از روی اون تشخیض می دید که کاربر لوگین کرده؟! درست؟!
خوب در هنگام لوگ اف شما مقدار اون متغیر رو خالی کنید و در رویدار پیچ لود چک کنید که اگر متغیر خالی بود ، صفحه ری دایرکت بشه روی صفحه لوگین.
موفق باشی.

naser2009
چهارشنبه 02 تیر 1389, 17:11 عصر
سلام حمید جان
نیاز به استفاده از اجکس ندارید.
شما برای ورود به سایت یه متقیر دارید که از روی اون تشخیض می دید که کاربر لوگین کرده؟! درست؟!
خوب در هنگام لوگ اف شما مقدار اون متغیر رو خالی کنید و در رویدار پیچ لود چک کنید که اگر متغیر خالی بود ، صفحه ری دایرکت بشه روی صفحه لوگین.
موفق باشی.
سلام دوسته من
هنگامی که کاربر از دکمه back استفاده میکنه به علت اینکه برخی از مرورگر ها از سیستم chaching استفاده می کنند هرگز رویداد page load اتفاق نمیفته و بنابراین نمیتونه اون مقدار رو(session) چک کنه ببینه کاربر login کرده یا نه !
بهترین کار هم همونیه که گفتی(خالی کردن cache کاربر) ajaxشو که بلدی اینم کده ASP.NET

Response.Cache.SetCacheability(HttpCacheability.No Cache);
Response.Cache.SetExpires(DateTime.Now);
Response.Cache.SetAllowResponseInBrowserHistory(fa lse);
سه خط کد ناقابل رو قبل از هر کدی داخل رویداد load صفحه بزار
بدین ترتیب کاربر اگه back بزنه با پیغام page expired مواجه میشه و اطلاعات شما رو نمیبینه

hamedsabzian
چهارشنبه 02 تیر 1389, 17:56 عصر
ممنون از اینکه پاسخ دادید!

Response.Cache.SetCacheability(HttpCacheability.No Cache);
Response.Cache.SetExpires(DateTime.Now);
Response.Cache.SetAllowResponseInBrowserHistory(fa lse);
این کد رو امتحان کرده بودم،جواب نمیداد و نمیده!
(این کد رو توی Page_Load صفحه ای گذاشتم که کاربر وقتی Login میکنه، می بینه)
فرضا هم جواب بده، می خوام تا وقتی که کاربر Login هستش بتونه از Back استفاده کنه، فقط وقتی که Logout کرد دیگه نتونه!
؟

aminghaderi
پنج شنبه 03 تیر 1389, 15:39 عصر
خوب اگه اینطوری لازم هست ، بهترین راه استفاده از همون کد AJAX هستش؟!
چون چرخه حیاط صفحه در ASP با این مورد شما تناقض شدید داره؟!
چون اون باید به سرور بره و برگرده ، اما دکمه بک مرور گر مربوط به کلاینت هستنش؟!
از سیستم Callback چطور؟؟؟ استفاده نکردید؟؟؟
ممنون می شم ، این کد اجکس رو هم همین جا قرار بدید تا من و دوستان دیگه هم استفاده کنیم.

hamedsabzian
جمعه 04 تیر 1389, 13:19 عصر
با سلام.
دقیق نمی دونم با CallBack میشه یا نه اما فکر می کنم بشه و زیاد فرق نکنه.
ولی کد Ajax رو می زارم.

توی MasterPage صفحاتی که در صورت Login بودن نمایش داده می شوند، این Sctipt رو قرار دهید:

<script type="text/javascript">
var XMLHttpRequestObject0 = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject0 = new XMLHttpRequest();
} else if (window.ActiveXObject) {
XMLHttpRequestObject0 = new ActiveXObject("Microsoft.XMLHTTP");
}
var DateTime0=new window.Date();
if(XMLHttpRequestObject0) {
XMLHttpRequestObject0.open("GET","../Login.aspx?t="+DateTime0.getTime(),false);
XMLHttpRequestObject0.onreadystatechange = function()
{
if (XMLHttpRequestObject0.readyState == 4 &&
XMLHttpRequestObject0.status == 200) {
if(XMLHttpRequestObject0.responseText=="No")
{
document.location="../Login.aspx";
}
}
}
XMLHttpRequestObject0.send(null);
}
</script>
بعد این کد رو بزارید توی Page_Load یکی از صفحاتی که قراره همه ببینند:
if (Request.QueryString["t"] != null)
{
if (Session["UserId"] != null)
Response.Write("Yes");
else
{
//Session.Abandon();
//Session.Clear();
Response.Write("No");
}
Response.End();
}

هنگام Load مستر تست میشه که کاربر Login هست یا نه، اگه بود براش Yes و اگه نبود No میفرسته. اگه No فرستاد، کاربر به صفحه Login هدایت میشه.

موفق باشید.