PDA

View Full Version : تعداد بازدید کننده روزانه



gole_maryam
یک شنبه 03 مهر 1384, 10:02 صبح
سلام
من یک سایت طراحی کرده ام که تعداد بازدید کننده را به طور کلی نمایش می دهد ولی می خواهم تعداد بازدید کننده را به طور روزانه را هم نمایش دهد ولی نمی دانم چطور این کار را انجام دهم از شما دوستاغن عزیز خواهش می کنم که به من کمک کنید و در صورت امکان کد بازدید کننده روزانه را برای من بنویسید البته به vb از شما دوستان نهایت تشکر را دارم
مرسی

gole_maryam
سه شنبه 05 مهر 1384, 00:35 صبح
میشه خواهش کنم یک نفر به من جواب بدهد

Behrouz_Rad
سه شنبه 05 مهر 1384, 01:41 صبح
اول از هر چیز این رو باید بدونید که آماری که در مورد سایت ها اعلام میشه، یک آمار نسبی هست و هیچگاه امکان به دست آوردن آمار تعداد بازدیدکنندگان به صورت قطعی وجود نداره.
دلیلش هم اینه که یک کاربر می تونه بارها وارد صفحات سایت بشه، از اونها دیدن کنه و خارج بشه.
و اما...
بهترین راه برای به دست آوردن آمار نسبی تعداد بازدیدکنندگان، نوشتن کدهای مربوطه در روال BeginRequest فایل Global.asax است.
هرگاه که درخواست پردازشی توسط کاربر به سرور ارسال شود، این رویداد فراخوانی می شود.
این آمار رو در دیتابیس نگهداری کنید.
در ساده ترین حالت، تنها موردی که نیاز دارید، تاریخ است.
پس از ذخیره تاریخ در دیتابیس، با یک دستور Select شبیبه به دستور زیر، آمار رو استخراج می کنید.


Select Count(*) From myTable Group By myDateField Order By myDateField DESC

از آنجایی که رکوردها به صورت نزولی مرتب شده اند، اولین رکورد، آمار بازدیدکنندگان امروز، دومین رکورد، آمار بازدیدکنندگان دیروز و ...
این آمار رو میشه در زمان های مشخصی سازماندهی کرد.

راه بهتری که وجود داره و در فضای دیتابیبس صرفه جویی بیشتری میشه (و بنده هم این راه رو پیشنهاد می کنم)، این است که در آغاز روز جدید، یک رکورد به جدولی که آمار بازدیدکنندگان را در آن ذخیره می کنید قرار دهید.
این رکورد باید دارای 2 فیلد باشد. 1) تاریخ 2) تعداد بازدیدکنندگان
با هر بار فراخوانی روال BeginRequest، به آخرین رکورد جدول ، یک واحد اضافه کنید.
دستور به دست آوردن آمار نیز کمی تغییر می کند.


Select * From myTable Order By myDateField DESC


در حالت پیشرفته، از HTTP Modules استفاده میشه که به صورت یک فایل DLL با انتخاب و انتساب زمان عملکرد آنها در کدنویسی برنامه و پیکربندی در فایل Web.Config مورد استفاده قرار می گیرند.
موفق باشید.

saeed_82
سه شنبه 05 مهر 1384, 11:12 صبح
ما از Session نمی تونیم استفاده کنیم؟

Behrouz_Rad
سه شنبه 05 مهر 1384, 13:05 عصر
ما از Session نمی تونیم استفاده کنیم؟
!!!!!!!!!!!!!!!!!!!!

aidinwashere
سه شنبه 05 مهر 1384, 17:59 عصر
شاید نتونید از Cookie به دلایل مختلف استفاده کنید ولی Session همونطور که میدونید روی Server هست .
شاید این دو رو اشتباه کردید.
با تشکر از پیغام جناب راد.

Behrouz_Rad
سه شنبه 05 مهر 1384, 19:10 عصر
یک مسئله ی مهم در اینجا وجود داره که دوستان عزیز باید به اون توجه داشته باشند.
اگر کوکی ها در مرورگر کاربر غیر فعال باشند، قادر به استفاده از Session ها نیز نیستید.
و اما توضیح مطلب فوق:
همون طور که می دونید، Session ها حاوی مقادیری اطلاعات هستند که در حافظه ی سرور به وسیله برنامه نویس ایجاد می شوند.
زمانی که کاربری برای مرتبه ی اول اقدام به مشاهده صفحه ای از سایت می کند، دو چیز اتفاق می افته:
1) قسمتی از حافظه ی سرور به یک Session برای کاربر اختصاص داده میشه و به وسیله یک عدد منحصر به فرد که بهش SessionID میگن (و قبلا در موردش مفصلا صحبت کردم) مشخص میشه.
2) یک کوکی بر روی سیستم کاربر قرار می گیره که مقدار SessionID در اون ذخیره میشه.

زمانی که کاربر وارد صفحه ای میشه که در اون صفحه از Session ها استفاده میشه، برنامه در سیستم کاربر به دنبال اون کوکی ای می گرده که مقدار SessionID در اون قرار داره. (جهت اطمینان از اینکه به Session کاربر حافظه ای اختصاص داده شده)
از طریق این مکانیزم، سرور قادر به تشخیص SID و مقادیر ذخیره شده در Session ها برای هر کاربر است.
اما سوال اینجاست که در صورتی که کوکی ها در مرورگر کاربر غیر فعال باشند، چه اتفاقی می افته؟
پاسخ: می تونید همچنان از Session ها استفاده کنید اما از آنجایی که SID قادر به ذخیره شدن در سیستم کاربر نیست، بالطبع Session ها نیز نمی توانند مورد دسترسی قرار بگیرند و تنها Session هایی در دسترس هستند که در همان صفحه (نه در صفحات دیگر) استفاده می شوند.
در صورتی که به صفحه ی دیگری Redirect کنید، مقدار Session از بین می رود.
به عنوان مثال، اسکریپت زیر در صفحه به خوبی جواب می دهد:


<%
Session("Message") = "Hello, World!"
Response.Write Session("Message")
%>

اما در صورتی که کوکی هادر مرورگر کاربر غیر فعال باشند و کاربر به صفحه دیگری Redirect شود، Session دیگر مقداری نخواهد داشت!
موفق باشید.

rezaei manesh
یک شنبه 15 بهمن 1385, 11:17 صبح
من توی Global.asax مقدار شمارنده رو افزایش می دم
اما یه مشکلی هست و او اینه که من 2تا قسمت دارم که یکی ورود مدیر هست که با یه url دیگه وارد می شه و اطلاعات رو وارد می کنه و یه قسمت هم برای کاربران حالا من نمی خوام وقتی یک url خاص(مدیریت) درخواست می شه شمارنده کار کنه؟

Behrouz_Rad
یک شنبه 15 بهمن 1385, 22:10 عصر
نام صفحه یا URL رو بررسی کن و در صورتی که جزء صفحات مورد نظرت بود، شمارنده رو یک مقدار افزایش بده،Else Do Nothing

rezaei manesh
سه شنبه 17 بهمن 1385, 16:30 عصر
چه طوری باید در این فایل آدرس صفحه رو پیدا کنم ؟
در ضمن این تاپیک هم دیدم
System.IO.Path.GetFileName(Request.Url.LocalPath() )
Request.Url.AbsoluteUri
Request.Url.PathAndQuery
اینها هیچ کدوم کار نمی کنند

Behrouz_Rad
سه شنبه 17 بهمن 1385, 16:57 عصر
HttpContext.Current.Request

iman_22a
جمعه 20 بهمن 1385, 15:50 عصر
با تشکر از راهنمایی های ارزنده جناب راد
من با استفاده از HttpModule یک کلاس ساختم و به پروژم اضافه کردم . تمام قسمت های لازم را طبق راهنمایی شما و Msdn نوشته ام و در قسمت متد Application_BeginRequest از این کلاس یک متد دیگر از کلاس مخصوص برای ثبت آمار سایت را صدا می زنم و به این ترتیب تعداد بازدیدکنندگان سایت در هر روز را در بانک ذخیره می کنم و تا اینجا برنامه در اجرا مشکلی ندارد ، تنها مشکل این است که با اجرای صفحه اصلی سایت ، متد مذکور 8 بار اجرا می شود ( احتمال می دهم که این Application_BeginRequest ، 8 بار فراخوانی می شود ). می خواستم ببینم راهی وجود دارد که این متد تنها یکبار اجاره شود ؟؟؟

rezaei manesh
سه شنبه 02 بهمن 1386, 14:39 عصر
سلام
من می خوام تعداد بازدید های کل و روزانه و حاضر رو داشته باشم برای این کار یه جدول دارم که بازدید ها رو بر اساس تاریخ و تعداد ثبت می کنم در حالت خلاصه اون حالا از کد زیر استفاده می کنم اما هر بار که یکی میاد تو سایت 2 یا 4 تا به کل بازدید و بازدید روزانه اضافه می شه من فیلد مربوطه رو 1+ می کنم اما ...
احتمال می دم که تابه چند بار اجرا بشه و.. من کد هام رو اینجا می زارم در ضمن همین کد ها رو هم برای امتهان یک بار در Session_Startهم گذاشتم اما مشکل حل نشد


Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
Try
' Session.Timeout = 5 '5 minute timeout
'Application.Lock()
'If HttpContext.Current.Request.Url.ToString.ToLower = "http://www.haghshenas-anzali.com" _
'Or HttpContext.Current.Request.Url.ToString.ToLower = "http://www.haghshenas-anzali.com/index.aspx" _
'Or HttpContext.Current.Request.Url.ToString.ToLower = "http://haghshenas-anzali.com" Then
' UpdateSiteView()
' Application("intActiveUserNumber") = Int16.Parse(Application("intActiveUserNumber").ToString()) + 1

'ElseIf HttpContext.Current.Request.Url.ToString.ToLower = "http://www.haghshenas-anzali.com/" _
' Or HttpContext.Current.Request.Url.ToString.ToLower = "http://haghshenas-anzali.com/index.aspx" _
' Or HttpContext.Current.Request.Url.ToString.ToLower = "http://haghshenas-anzali.com/index.aspx/" _
' Or HttpContext.Current.Request.Url.ToString.ToLower = "http://haghshenas-anzali.com/" _
' Or HttpContext.Current.Request.Url.ToString.ToLower = "http://www.haghshenas-anzali.com/index.aspx/" Then
UpdateSiteView()
Application("intActiveUserNumber") = Int16.Parse(Application("intActiveUserNumber").ToString()) + 1

'End If
'Application.UnLock()
Catch 'ex As Exception
Application("intActiveUserNumber") = 1
End Try
End Sub

Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As System.EventArgs)
Try
' Session.Timeout = 5 '5 minute timeout
'Application.Lock()
'If HttpContext.Current.Request.Url.ToString.ToLower = "http://www.haghshenas-anzali.com" _
'Or HttpContext.Current.Request.Url.ToString.ToLower = "http://www.haghshenas-anzali.com/index.aspx" _
'Or HttpContext.Current.Request.Url.ToString.ToLower = "http://haghshenas-anzali.com" Then
' Application("intActiveUserNumber") = Int16.Parse(Application("intActiveUserNumber").ToString()) - 1

'ElseIf HttpContext.Current.Request.Url.ToString.ToLower = "http://www.haghshenas-anzali.com/" _
' Or HttpContext.Current.Request.Url.ToString.ToLower = "http://haghshenas-anzali.com/index.aspx" _
' Or HttpContext.Current.Request.Url.ToString.ToLower = "http://haghshenas-anzali.com/index.aspx/" _
' Or HttpContext.Current.Request.Url.ToString.ToLower = "http://haghshenas-anzali.com/" _
' Or HttpContext.Current.Request.Url.ToString.ToLower = "http://www.haghshenas-anzali.com/index.aspx/" Then
Application("intActiveUserNumber") = Int16.Parse(Application("intActiveUserNumber").ToString()) - 1

'End If
'Application.UnLock()
Catch 'ex As Exception
'Application("intActiveUserNumber") = 1
End Try
End Sub

DotNet_King
چهارشنبه 03 بهمن 1386, 08:44 صبح
اول از هر چیز این رو باید بدونید که آماری که در مورد سایت ها اعلام میشه، یک آمار نسبی هست و هیچگاه امکان به دست آوردن آمار تعداد بازدیدکنندگان به صورت قطعی وجود نداره.
دلیلش هم اینه که یک کاربر می تونه بارها وارد صفحات سایت بشه، از اونها دیدن کنه و خارج بشه.


من فکر می کنم اگه IP کلاینت رو بگیرید، در ارجاعات بعدی چک کنید، آمارها خیلی
دقیق تر میشه. کافیه Ip ها رو برای یه مدت تو یه بانک ذخیره کنید.

rezaei manesh
چهارشنبه 03 بهمن 1386, 10:46 صبح
برای استفاده از IP در این مورد باید یکری از اصول رو رعایت کرد که هم کارم رو زیاد می کنه هم من اون اصول رو دقیاقاً نمی دونم
مثلا باید هر درخواست رو که کاربر می کنه مثلانم هر صفحه رو که باز می کنه زمان ورود این ip به روز بشه و... که این مستلزم اون هست که هر صفحه ای که باز می شه من یه پروسیجر رو اجرا کنم و..
حالا برای کار من چه گزینه ای بهتره اگه همین ip خوبه اون نکات استفاده از اونو بگید و اگر نه راه حل دیگه ای پیشنهاد کنید لطفاً، من امار دقیق به این شکل که اگه ادرس صفحه رو کاربر روی یه IE جدید زد سیستم تشخیص بده و یکی اضافه نکنه رو برای اینجا نمی خوام من فقط می خوام که وقتی هر بار سایت میاد بالا یکی اضافه بشه نه 4 تا یا 2 تاو..
http://haghshenas-anzali.com رو ببینید؟ با هر بار اومدن 4 تا اضافه می شه؟!

DotNet_King
چهارشنبه 03 بهمن 1386, 17:21 عصر
برای استفاده از IP در این مورد باید یکری از اصول رو رعایت کرد که هم کارم رو زیاد می کنه هم من اون اصول رو دقیاقاً نمی دونم
مثلا باید هر درخواست رو که کاربر می کنه مثلانم هر صفحه رو که باز می کنه زمان ورود این ip به روز بشه و... که این مستلزم اون هست که هر صفحه ای که باز می شه من یه پروسیجر رو اجرا کنم و..


ببین دوست عزیز، آقای راد هم این رو نوشته بودند که به هیچ وجه آمار دقیق نمیشه گرفت
من هم نوشته بودم با استفاده از ip ،دقیق تر میشه نه کاملا دقیق! فقط خطا به میزان قابل
توجهی کم میشه

در ضمن استفاده از ip نیاز به رعایت هیچ اصول خاصی نداره! شما 1000 تا ip آخری رو
که از سایتتون دیدن کردن رو تو یه بانک ذخیره کن - البته به صورت رشته ای - بعدشip هر
درخواست جدیدی رو که از سایت میشه، مقایسه کنید اگه تکراری نبود ip رو جایگزین قدیمی ترین ip کنید و یه شماره اضافه و گر نه بیخال هر در مورد بشین! به همین راحتی ! کافیه همه
این کارها رو تو یه فانکشن بزاری و اون رو تو فرم لود صفحه صدا کنی!

به این علت دقیق نمی شه که هر بار که یک کاربر کانکت میشه یه ip تغییر میکنه
ولی می تونه در برابر درخواست هایی که در یک زمان از طرف یه کاربر چند بار شده،
واکنش بده درست قبل از دیسکانکت شدن. اگه به سایت های پیشرفته آمار گیری وب
هم نگاهی بندازید، دقیقا همین کار رو میکنند!



حالا برای کار من چه گزینه ای بهتره اگه همین ip خوبه اون نکات استفاده از اونو بگید و اگر نه راه حل دیگه ای پیشنهاد کنید لطفاً، من امار دقیق به این شکل که اگه ادرس صفحه رو کاربر روی یه IE جدید زد سیستم تشخیص بده و یکی اضافه نکنه رو برای اینجا نمی خوام من فقط می خوام که وقتی هر بار سایت میاد بالا یکی اضافه بشه نه 4 تا یا 2 تاو..
http://haghshenas-anzali.com (http://haghshenas-anzali.com/) رو ببینید؟ با هر بار اومدن 4 تا اضافه می شه؟!


من فکر نمی کنم ip ربطی مرورگر داشته باشه که با باز شدن صفحه جدید عوض بشه ! همواره ثابته، مگه کاربر dc بشه!

mehrdad201
چهارشنبه 03 بهمن 1386, 19:02 عصر
یه نکته هست

اگه دو تا کاربر با IP مشابه بیان (مثلا از یه ISP) اونوقت که قرار باشه IP های مشابه رو در نظر نگیره به نظر شما تو امار اشتباه به وجود نمیاد ؟!

rezaei manesh
پنج شنبه 04 بهمن 1386, 09:24 صبح
در ضمن استفاده از ip نیاز به رعایت هیچ اصول خاصی نداره! شما 1000 تا ip آخری رو
که از سایتتون دیدن کردن رو تو یه بانک ذخیره کن - البته به صورت رشته ای - بعدشip هر
درخواست جدیدی رو که از سایت میشه، مقایسه کنید اگه تکراری نبود ip رو جایگزین قدیمی ترین ip کنید و یه شماره اضافه و گر نه بیخال هر در مورد بشین! به همین راحتی ! کافیه همه
این کارها رو تو یه فانکشن بزاری و اون رو تو فرم لود صفحه صدا کنی!

اگه کاری که شما بگین رو انجام بدم اونوقت اگه یه کاربر ساعت 11 صبح مورخه 4/11/86 بیاد دیدن کنه و بعد بره ساعت 2 همین روز بیاد اونوقت دیگه به شمارنده اضافه نمی شه ؟ یا فردا بیاد و...
باید Ip با زمان ثبت بشه و یه تاریخ مصرف هم داشته باشه که اگه خارج از اون باز باشه یکی اضافه میشه
این طور طراحی کنم چطوره؟:
یه جدول داشته باشم که ip و زمان رو ثبت می کنه زمان به این شکل(0423:40/11/1386) و هر بار که یه صفحه اجرا می شه یه پروسیجر اجرا بشه و توی این جدول همه رکورد هایی رو که مربوط به 5 دقیقه هستند رو پاک کنه و بعد ip درخواست رو در لیست چک کنه اگه بود که هیچ اگه نبود یکی اضافه کنه.

در مورد تکراری بودن ip ها هم باید بگم به ندرت پیش میاد که ip تکراری باشه مگر اینکه هکر ها جعل کنند یا...

mehrdad201
پنج شنبه 04 بهمن 1386, 11:20 صبح
ولی تا اونجاییکه من شنیدم در ایران اگه شما و یه نفر دیگه از یه ISP مشترک استفاده کنند ای پی هاشون یکسان هست.

نمیدونم شاید اون چیزی که من شنیدم درست نباشه. بهتره دوستان دیگه هم بیان نظر بدن.

eyes_shut_number1
پنج شنبه 04 بهمن 1386, 11:37 صبح
اگه اینطور باشه که ای پی ها کانفلیگ میشن!نه؟

DotNet_King
پنج شنبه 04 بهمن 1386, 12:15 عصر
ببینید من نوشته بودم دقیق تر ! نه کامل
علاوه بر این من اون روش رو برای این عنوان کرده بودم، که بگم ایرادی نداره و اینقدر هام پیچیده نیست ! این که تغییر پیچیده ای نیست! حدس هم می زدم همچین ایرادی بگیرید.
ببینید اگه سایت شما فعال باشه و در فواصل زمانی کوتاه به روز بشه - مثل سایت های خبری - چیزی که برای شما مهمه اینه که شما بدونید از اطلاعات به روز شده شما چند نفر دیدن کردن، اصلا مهم نیست که آقای قلی که دیروز از سایت دیدن کرده امروز هم شاید دیدن کنه ! اصلا این مدلی که شما می خواهید منطقی نیست!
اگه فقط قصد ثبت تعداد کاربران که یه اکانت به هر کدوم اختصاص بدید تا با اون لاگین شن! در
ثانی فکر کنم که با مفهوم آمار و احتمالات خوب آشنا نیستید! خیلی کم آدم بیکار گیر میآد که از یه سایت چند بار تو روز دیدن بکنه ! مگه این که سایت خبری باشه و یا سرویسی ارائه بده! فقط با ثبت آی پی میتونید از این مدل اشتباهات که کاربر اشتباهی ریفرش رو بزنه و یا رو لینک دو بار کلیک کنه و ... جلوگیری کنید .
در ضمن isp ها یه سری IP دارن که هر کاربر هر دفعه یکی از اونها رو میگیره! پس چیزی که شنیدید درسته ! ولی هیچ وقت دو کاربر همزمان ip یکسان ندارند! پس خیالت راحت باشه
به قول آقای رضایی هر ip رو بعد ربع ساعت از بین ببرید! اگه مایلید تو پرشن استت عضو بشین و کدی رو که به شما میده رو تو سایتتون کپی کنید، بعد هم نتایجش رو بررسی کنید، متوجه میشد که اونهم همین کار رو کرده!
به نظر من این موضوع اینقدر که روش حساسیت دارید، اهمیت نداره! ولی از هر روشی که این مشکل رو رفع کنه با تمام وجود استقبال میکنم!!

sinpin
پنج شنبه 08 فروردین 1387, 02:08 صبح
ولی هیچ وقت دو کاربر همزمان ip یکسان ندارند! پس خیالت راحت باشه
اینطور نیست

isp ها یه سری IP دارن که هر کاربر هر دفعه یکی از اونها رو میگیره! پس چیزی که شنیدید درسته !
ISP ها معمولا درخواستهای کاربران اینترنتی رو به یکیک Valid IP نگاشت (map) میکنند.

ibd_iran
پنج شنبه 08 فروردین 1387, 14:02 عصر
چگونه می شود تعداد افراد حاضر راسایت مثل خود این سایت البته منظور کسی که به سایت وارد نشده اند مثل تعداد مهمان های همین سایت بدست آورد ؟

twelve
پنج شنبه 08 فروردین 1387, 20:34 عصر
چگونه می شود تعداد افراد حاضر راسایت مثل خود این سایت البته منظور کسی که به سایت وارد نشده اند مثل تعداد مهمان های همین سایت بدست آورد ؟

ساده ترین راه استفاده از اشیایSession و Application و استفاده از فایل Global.asax می باشد