PDA

View Full Version : اجرای یک تابع ASP.Net از طریق JavaScript



صابر
سه شنبه 16 اسفند 1384, 08:07 صبح
می‌خوام وقتی یک نفر از سایت بازدید می‌کنه، شناسایی بشه (مرورگر، referrer و ...)
توی global.asax این کار رو کردم.
کسی که به www.sitename.com بیاد، شناسایی می‌شه و به صفحه پیش‌فرض می‌ره.

اما مشکل اینجاست که این سایت صفحاتی غیر از aspx هم داره. (مثلاً html)
و بازدید کننده ممکنه مستقیم به www.sitename.com/filename.html بره.

با توجه به اینکه از فضای اشتراکی استفاده می‌کنم به IIS دسترسی ندارم که بتونم تنظیم کنم هنگام اجرای html فایل session_start مربوط به global.asax رو اجرا کنه.

تازه ممکنه توی سایت غیر از صفحات html صفحات دیگه‌ای مثل php هم باشه.

آیا می‌شه از جاوا اسکریپت جوری استفاده کرد که session_start رو صدا بزنه؟
و یا اینکه یک کد جاوا اسکریپت که اونو توی هر فایلی بذاریم یک تابع از یک فایل asp.net رو اجرا کنه.

طبیعتاً مورد دوم باید بشه، اگه ایده یا منبعی دارین لطفاً معرفی کنید که پایان نامه‌ی بنده توی این قسمت گیره و دو-سه روز دیگه بیشتر مهلت ندارم.

متشکرم

Behrouz_Rad
سه شنبه 16 اسفند 1384, 08:21 صبح
ISAPI تنها برای فایل های ساپورت شده توسط ASP.NET فراخونی میشه.
فایل های aspx، ascx و asmx از این دست فایل ها هستند.
تنها راه، دسترسی به IIS هاست و مپ کردن پسوند مورد نظر با ISAPI است.


آیا می‌شه از جاوا اسکریپت جوری استفاده کرد که session_start رو صدا بزنه؟
ایده ی جالبی نیست اما میتونی از XMLHTTP استفاده کنی.

موفق باشید.

صابر
سه شنبه 16 اسفند 1384, 08:43 صبح
...ایده ی جالبی نیست اما میتونی از XMLHTTP استفاده کنی.
از جوابتون متشکرم. اما از XMLHTTP طبیعتاً باید توی صفحاتی که توسط ASP.Net ساپورت می‌شن استفاده کرد دیگه؟
اگه صفحه مورد نظر HTML یا PHP بود چی؟
به نظر شما در چنین مواقعی تنها راه استفاده از JavaScipt نیست؟

Behrouz_Rad
سه شنبه 16 اسفند 1384, 08:58 صبح
اما از XMLHTTP طبیعتاً باید توی صفحاتی که توسط ASP.Net ساپورت می‌شن استفاده کرد دیگه؟
اگه صفحه مورد نظر HTML یا PHP بود چی؟
به نظر شما در چنین مواقعی تنها راه استفاده از JavaScipt نیست؟
دوست عزیزم!
جاوا اسکریپت ذاتا برای کار با XMLHTTP به وجود اومده.
دقیقا همون کاری که با تکنیک AJAX انجام می پذیره، با استفاده از XMLHTTP هست!
زمانی که درخواست پردازشی برای سرور ارسال می کنید، روال Begin_Request فراخونی میشه؛ در نتیجه، با ایجاد یک شی XMHTTP و ارسال درخواست پردازش صفحه ی مورد نظر به سرور، روال مذکور فراخوانی شده و کلیه ی دستورات نوشته شده در آن (شامل اخذ و ذخیره ی اطلاعات REFERER) اجرا می شوند.

بگذار جور دیگه ای بیان کنم.
جاوا اسکریپت، زبان مکملی هست، که به زبان Server-Side استفاده شده، ارتباطی نداره.
جاوا اسکریپت، همراه با کدهای HTML فراخونی شده و وظیفه ی محوله رو انجام میده.
فرض کن کاربری قصد بازدید صفحه ی HTML ای از سایت تو رو داشته باشه.
یک تابع جاوا اسکریپت می نویسی، که با ایجاد یک شی XMLHTTP، درخواستی رو به یک صفحه ی aspx، ارسال کنه.
زمانی که درخواست پردازشی به سرور رسید، پسوند فایل درخواست شده، توسط ISAPI (موتور پردازشگر ASP.NET)، بررسی میشه. پسوند فایل، aspx تشخیص داده میشه. پس فایل، به منظور پردازش، به لایه ی پردازش ارسال میشه.
طبعا، این پردازش، شامل پردازش روال های فایل Global.asax نیز خواهد بود.
دستورات بازیابی اطلاعات REFERER رو در روال Begin_Request این فایل بنویس.

موفق باشید.

صابر
سه شنبه 16 اسفند 1384, 15:22 عصر
متشکرم :)
این کار رو امتحان می‌کنم و نتیجه رو می‌گم.

صابر
جمعه 11 فروردین 1385, 03:56 صبح
..
زمانی که درخواست پردازشی به سرور رسید، پسوند فایل درخواست شده، توسط ISAPI (موتور پردازشگر ASP.NET)، بررسی میشه. پسوند فایل، aspx تشخیص داده میشه. پس فایل، به منظور پردازش، به لایه ی پردازش ارسال میشه.
....


باز هم سلام،
متأسفانه نشد!
من کمی در مورد AJAX مقاله و مثال و مطلب خوندم، تصمیم گرفتم که از کتابخانه AJAX.Net استفاده کنم.
اجرای یک تابع از پروژه‌ی ASP.Net توسط AJAX.Net سبب اجرای دستورات Session_Start در global.asax نمی‌شه. (البته توی تستی که بنده کردم که نشد!)
از طرف دیگه، توابعی که برای اجرا توسط AJAX.Net نوشته می‌شوند، در یک کلاس نگهداری می‌شوند و طبیعتاً در آنها نمی‌توان referrer,ip,browser,... را شناسائی کرد.
با این تفاسیر دو راه باقی می‌مونه، یکی اینکه بتونم این مقادیر را با استفاده از جاوااسکریپت پیدا کنم: ip,refferer,browser,os,enter time,exit time
که سخته! گرچه مثال‌های زیادی وجود داره، اما به عنوان مثال عملاً هیچ تابع جاوااسکریپتی پیدا نکردم که بتونه در صورتی که مرورگر کاربر اینترنت اکسپلورر باشه، ip اون رو بدست بیاره! و یا نوع سیستم عامل و یا referrer رو.

راه دوم، اینه که یه عزیز به من بگه این سایت‌های آمارگیر مثل Nedstat و جدیداً Persianstat.com چطور می‌تونن با استفاده از یک خط کد در سایت مقصد، اطلاعات اون رو بدست بیارن.

مثلاً بنده که از PersianStat.com سرویس می‌گیرم. این کد را در سایت خود گذاشتم:


<script language='JavaScript' type='text/javascript' src='http://www.persianstat.com/service/stat.js'></script>
<script language='JavaScript' type='text/javascript'>
persianstat('10000327', 0);
</script>

که طبعاً http://www.persianstat.com/service/stat.js رو می‌تونید داونلود کرده و ببینید.
و نتیجه این شده است: http://www.persianstat.com/Results.aspx?id=10000327

آنها چطور اطلاعات بازدیدکننده (referrer,ip,..) را می‌گیرند و به سرور خود می‌فرستند؟

پیشاپیش از پاسختان متشکرم

Saeed_Taghvaee
جمعه 11 فروردین 1385, 08:04 صبح
البته من این سوریس رو تا به حال ندیده بودم اما سرویس های اینگونه بسیار ساده و با استفاده از تکنیک تصاویر داینامیک این کارا انجام میدهند. نمونه جاوا اسکریپتی که از وبگذر دیدم به شکل زیر بود این اسکریپت یک تگ ایمیج را از آدرس یک aspx به سایت با استفاده از جاوا اسکریپت وارد میکند .

function counter(code)
{var browsev="7";
var pos=navigator.appVersion.indexOf("MSIE 6");
if (pos>=0){var browsev="1"};
var pos=navigator.appVersion.indexOf("MSIE 5");
if (pos>=0){var browsev="2"};
var pos=navigator.appVersion.indexOf("MSIE xxx");
if (pos>=0){var browsev="3"};
var pos=navigator.appVersion.indexOf("MSIE 7");
if (pos>=0){var browsev="4"};
var pos=navigator.userAgent.indexOf("Firefox");
if (pos>=0){var browsev="5"};
var pos=navigator.appVersion.indexOf("Netscape");
if (pos>=0){var browsev="6"};
var osv="6";
var pos=navigator.appVersion.indexOf("Windows NT 5.1");
if (pos>=0){var osv="1"};
var pos=navigator.appVersion.indexOf("Windows NT 5.0");if (pos>=0){var osv="2"};
var pos=navigator.appVersion.indexOf("Win 9x");
if (pos>=0){var osv="3"};
var pos=navigator.appVersion.indexOf("Windows NT 4");
if (pos>=0){var osv="4"};
var pos=navigator.appVersion.indexOf("Windows 98");
if (pos>=0){var osv="5"};
screensize=screen.width+'x'+screen.height;colors="";
nav=navigator.appName;
if(nav.substring(0,9)=="Microsoft"){nav="MSIE";};
version=Math.round(parseFloat(navigator.appVersion )*100);i
f((nav=="MSIE") && (parseInt(version)==2)){version=301;};
java="";
if(navigator.appName=="Netscape"){ if(version>400);if(version>300)for(var i=0;i';i<navigator.plugins.length;i++)plug +=navigator.plugins[i].name+":"};
colors=(nav=="MSIE")?screen.colorDepth:screen.pixelDepth;if(colors=="undefined"){colors="5";};
if(colors=="32"){colors="1";};if(colors=="24"){colors="2";};if(colors=="16"){colors="3";};if(colors=="8"){colors="4";};
document.write ('<p align=center><a href=http://www.webgozar.com/counter/stats.aspx?code=' + code +' target=_blank><img width=22px height=22px alt="WebGozar.com | شمارنده فارسی برای وب سایت های ایرانی" border=0 src=http://www.webgozar.com/counter/counterpic.aspx?num=4&code=' + code +'&rnd=' + Math.round(Math.random()*50000) + '&b=' + browsev + '&o=' + osv + '&s=' + screensize + '&c=' + colors + '&ref=' + escape(document.referrer) + '></a></p>');
}
counter('101817');
از متن این اسکریپت پیداست که با چه راه ساده ای میتوان اطلاعات رو از سیستم کاربر گرفت. Ip هم با استفاده از همون راه قدیمی از رکوئست میگیرن و همه را در دیتا بیس ثبت میکنن.