PDA

View Full Version : سوال: شمارش آمار بازدید کننده گان



jeson_park
پنج شنبه 06 فروردین 1394, 08:41 صبح
با سلام
بهترین روش برای شمارش آمار بازدید کننده گان چی هست؟
چند تا روش رو امتحان کردم اما هر کدوم ایراد دارن
مثلاً در page_load کد زیر رو قرار دادم


cmd = new SqlCommand("UPDATE tblHits SET Hits = Hits+1 WHERE Name=@Name", conn);



ولی آمار درستی نمی ده و با هر بار refresh کردن صفحه آمار افزایش پیدا می کنه

از Global.asax و HttpApplicationState استفاده کردم

public static int count = 0;
void Application_Start(object sender, EventArgs e)
{
Application["userHit"] = count;
}

void Session_Start(object sender, EventArgs e)
{
count = Convert.ToInt32(Application["userHit"]);
Application["userHit"] = count + 1;
}


ولی متاسفانه به دلیل Application Pool Recycling آمار بعد از یه مدت 0 میشه (صفر کردن Idle Time-out و سایر تنظیمات AppPool هم مشکل رو حل نکرد )

malloc
پنج شنبه 06 فروردین 1394, 10:54 صبح
شما خودت استادی داداش اما من فکر میکنم سناریو اینجوری هست که توی شرط Ispostback! باید بنویسی که یکی به اون جدول اضافه کنه اما به شرط اینکه آی پی آدرسش تکراری نباشه و تاریخش هم واسه امروز نباشه .... یعنی شما باید یه جدول داشته باشی با فیلد های آی دی و آی پی و تاریخ که هر بار تو لود صفحه یک رکورد به این جدول اضافه میشه .....

حالا اگه مثلا میخوای آمار بازدید یک خبر خاص رو در بیاری که خوب دیگه جدول جدا نمیخواد و توی همون جدول مربوط به خبر یه فیلد اضافه میکنی که آمار بازدید این خبر رو هی ++ کنه ..... حالا تا اونجا که میدونم سایتهای معتبر هم با هر بار رفرش صفحه آمار بازدید فلان خبرشون یکی اضافه میشه

امیدوارم تونسته باشم کمکی کرده باشم

Hamid2547
پنج شنبه 06 فروردین 1394, 18:26 عصر
با کوکی میتونی مشکل رو حل کنی، توی جاوا اسکریپ یا هر جا راحتی بنویس اگر کوکی موجود نبود کوکی رو ست کنه، اگرم موجود بود که نادیده گرفته میشه، کد مربوط به افزایش تعداد شمارش هم بذار وسط این کد، یه چیزی تو این مایه ها:

if (document.cookie.indexOf('mycookie') == -1) {
document.cookie = 'mycookie=1';
//کد مربوط به افزایش رو اینجا بذار، برای هر رفرش افزایش پیدا نمیکنه شماره چون کوکی وجود داره
//یا خودت میتونی یه فلگ با سی شارپ تو این مایه ها درست کنی.
}

arashnaderi
پنج شنبه 06 فروردین 1394, 19:18 عصر
سلام
منظورتون از آمار بازدید چیه؟ تعداد بازدیدکنندگان آنلاین رو میخواین یا نه تعداد بازدید در هر روز؟ برای تعداد بازدیدکنندگان آنلاین که نباید مشکلی وجود داشته باشه. برای آمار بازدید روزانه هم به نظرم منطقی اینه واسه هر روز یک رکورد درج بشه در بانکتون، بعد واسه هر سیشن، یکی به تعدادش اضافه بشه. ولی خب اگه هدفتون نمایش درسایت نیستش، بهتره از google analytics استفاده کنید که خیلی دقیق ترو جامع تره
سایت های خارجی هم هستن که آمار بازدیدو بصورت استان و شهر هم میدن، که من تست کردم روی دامنه Irجواب نمیداد

jeson_park
شنبه 08 فروردین 1394, 10:38 صبح
سلام منظورتون از آمار بازدید چیه؟ تعداد بازدیدکنندگان آنلاین رو میخواین یا نه تعداد بازدید در هر روز؟ برای تعداد بازدیدکنندگان آنلاین که نباید مشکلی وجود داشته باشه. برای آمار بازدید روزانه هم به نظرم منطقی اینه واسه هر روز یک رکورد درج بشه در بانکتون، بعد واسه هر سیشن، یکی به تعدادش اضافه بشه. ولی خب اگه هدفتون نمایش درسایت نیستش، بهتره از google analytics استفاده کنید که خیلی دقیق ترو جامع تره سایت های خارجی هم هستن که آمار بازدیدو بصورت استان و شهر هم میدن، که من تست کردم روی دامنه Irجواب نمیداد با سلام و تشکر می خوام یه چیز ساده و جمع و جور باشه ولی یکتا بودن کاربرا برای من مهم هست

alireza_s_84
شنبه 08 فروردین 1394, 12:29 عصر
با سلام
بهترین روش برای شمارش آمار بازدید کننده گان چی هست؟
چند تا روش رو امتحان کردم اما هر کدوم ایراد دارن
مثلاً در page_load کد زیر رو قرار دادم


cmd = new SqlCommand("UPDATE tblHits SET Hits = Hits+1 WHERE Name=@Name", conn);



ولی آمار درستی نمی ده و با هر بار refresh کردن صفحه آمار افزایش پیدا می کنه

از Global.asax و HttpApplicationState استفاده کردم

public static int count = 0;
void Application_Start(object sender, EventArgs e)
{
Application["userHit"] = count;
}

void Session_Start(object sender, EventArgs e)
{
count = Convert.ToInt32(Application["userHit"]);
Application["userHit"] = count + 1;
}


ولی متاسفانه به دلیل Application Pool Recycling آمار بعد از یه مدت 0 میشه (صفر کردن Idle Time-out و سایر تنظیمات AppPool هم مشکل رو حل نکرد )

برای ثبت آمار بازدیدکنندگان باید از SessionStart استفاده کنید ، در این حالت تا زمانی که کاربر در سایت گردش میکنه فقط یکبار آمار بازدید افزایش پیدا میکنه ، اگر میخواین خیلی سختگیرانه برخورد کنید و حتی در صورتیکه کاربر در طول روز چندین بار به سایت مراجعه کنه باید در همین رویداد یک کوکی با مدت زمان انقضای همون روز درست کنید ، بعد هربار با شروع رویداد چک کنید اگر کوکی روی سیستم کاربر وجود داشت بازدیدی ثبت نکنید در غیر اینصورت کوکی رو ثبت و آمار بازدید رو یک واحد افزایش بدین.

protected void Session_Start()
{
if (Request.Cookies["Visit"] == null)
{
//آمار بازدید یک واحد افزایش پیدا می کند
//میتوانید در دیتابیس ذخیره کنید
//همچنین میتوان در شئی اپلیکیشن هم ذخیره کرد-


//افزودن کوکی به پاسخ
HttpCookie myCookie = new HttpCookie("Visit");
myCookie.Expires = DateTime.Today;
Response.Cookies.Add(myCookie);
}
}