۱۱ شهریور ۱۳۸۶

خط طلایی

بالاخره پس از 2 روز سر کار بودن بر سر یک مشکل احماقانه اینترنت اکسپلورر موفق به کشف و حلش شدم!

داستان از این قرار بود که می خواستم صفحه ای از یکی از سایتها را در سایت دیگری بوسیله فریم HTML نمایش بدهم. تا اینجا همه چی عادی بود و سایت مقصد بصورت یک فرم در سایت مبدا نشان داده می شد. در سایت مقصد از session استفاده کرده بودم که عین گربه هم کار می کرد و مشکلی نداشت. حالا وقتی سایت مقصد از داخل فریم در سایت مبدا باز می شد session آن از کار می افتاد! خیلی عجیب بود. چون فریم مثل یک مرورگر جدا عمل می کند و جالبتر اینکه این مشکل در Firefox وجود نداشت!

خلاصه سرتان درد نیاورم پس از 2 روز تحقیق و دردسر فهمیدم اینترنت اکسپلور به خاطر مسائل امنیتی جلوی انتقال sessionها را در حالتیکه صفحه وب از داخل فریم باز شود و مقصد هم سایت دیگری باشد، می گیرد!! برای حل مشکل باید به صفحه وب مقصد یک header اضافه شود که اینترنت اکسپلورر این موضوع به شدت امنیتی را نادیده بگیرد و با فریم هم مثل یک صفحه عادی برخورد کند.

برای حل این مشکل در زبانهای برنامه نویسی مختلف کافی است این خط طلایی عجیب به آغاز برنامه اضافه شود:


PHP: header('P3P: CP="CAO PSA OUR"');
ASP.Net: Response.AppendHeader("P3P", "CP=\"CAO PSA OUR\"")
ASP Calssic: Response.AddHeader "P3P","CP=""CAO PSA OUR"""