PDA

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



silverfox
پنج شنبه 02 آبان 1387, 18:22 عصر
سلام خشته نباشید!
من با global.asax و سشن تعداد افراد آنلاین و بازدید کل سایتمو می فهمم ولی حالا اگه بخوام بازدید های امروز سایت رو بدست بیارم و این اطلاعات رو توی دیتابیسم ذخیره کنم چیکار باید بکنم!؟لطفا راهنماییم کنین!ممنون!:خجالت:

shahab_ksh
پنج شنبه 02 آبان 1387, 19:49 عصر
من با global.asax و سشن تعداد افراد آنلاین و بازدید کل سایتمو می فهمم ولی حالا اگه بخوام بازدید های امروز سایت رو بدست بیارم و این اطلاعات رو توی دیتابیسم ذخیره کنم چیکار باید بکنم!؟لطفا راهنماییم کنین!ممنون


شما برای بازدید آنلاین سایتتون از Application استفاده کردید که یه تایم اوت داره و وقتی تایم اوت تموم میشه اطلاعاتشم از دست میره بهترین کار اینه همون لحضه که کاربر وارد سایتتون میشه یکی به بازدید در دیتابیس اضافه بشه ضمن اینکه وقتی سرور ریسیت میشه اطلاعاتتون Application هم میپره !

silverfox
پنج شنبه 02 آبان 1387, 21:59 عصر
آره خوب اینو که می دونم فقط چجوری بازدید های امروز رو از دیروز و از کل بازدید ها تفکیک کنم؟تایم اوتشو کجا می شه تنظیم کرد با ریست وبسروره یا چجوریه!؟

vb_bmw
پنج شنبه 02 آبان 1387, 23:21 عصر
سلام!

شما باید وقتی کاربر به سایتتون وارد میشه این اطلاعات رو ثبت کنید براش:

1 - IP
2 - تاریخ دقیق بازدید
3 - URL ای که فرستاده شده(دلخواه)
4 - ...

با دو تای اولی شما میتونی اطلاعات روزانه سایتت رو بازیابی کنی!چون تاریخ دقیق ورود رو داری!file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot.jpghttp://102.ir/yellow/28.gif

silverfox
پنج شنبه 02 آبان 1387, 23:26 عصر
خوب حالا اینارو از کجا بیارم!؟اگه کد c# برای این کار بذارین یا راهنماییم کنین ممنون می شم!

silverfox
پنج شنبه 02 آبان 1387, 23:34 عصر
توی سشن استارت اینو می نویسم ولی کار نمی کنه!چیکار کنم؟


SqlCommand cm = new SqlCommand();
SqlConnection cn = new SqlConnection(System.Web.Configuration.WebConfigur ationManager.ConnectionStrings["Connection"].ConnectionString);
cm.Connection = cn;
cm.CommandText = "update [pageview] set [pageview].[pv] = [pageview].[pv] + 1 where id = 1";
cm.CommandType = CommandType.Text;

shahab_ksh
جمعه 03 آبان 1387, 00:49 صبح
شما باید وقتی کاربر به سایتتون وارد میشه این اطلاعات رو ثبت کنید براش:

1 - IP
2 - تاریخ دقیق بازدید
3 - URL ای که فرستاده شده(دلخواه)
4 - ...

با دو تای اولی شما میتونی اطلاعات روزانه سایتت رو بازیابی کنی!چون تاریخ دقیق ورود رو داری


لزومی به ثبت تاریخ در بانک اطلاعاتی نیست الگوریتم های راحتری هم برای ثبت بازدید روزانه هست ! (البته اگه قصد ثبت روزانه بازدید نباشه)
ثبت IP هم کار دقیقی نیست

milade
جمعه 03 آبان 1387, 04:24 صبح
لزومی به ثبت تاریخ در بانک اطلاعاتی نیست الگوریتم های راحتری هم برای ثبت بازدید روزانه هست ! (البته اگه قصد ثبت روزانه بازدید نباشه)
ثبت IP هم کار دقیقی نیست
توضیح می دید؟؟؟

توی سشن استارت اینو می نویسم ولی کار نمی کنه!چیکار کنم؟
اگه فقط همینه که شما هنوز دستور رو اجرا نکردی (با این اجرا کن):

cm.ExecuteNonQuery();
موفق باشی

silverfox
جمعه 03 آبان 1387, 07:12 صبح
ا مرسی راس میگی! سوتی در حد تیم ملی بودا!!!خوب حالا اینارو ریختم رو دیتابیس!چجوری بازدید های هر روز رو تفکیک کنم؟!

silverfox
جمعه 03 آبان 1387, 10:57 صبح
چجوری می تونم آخر هر روز بازدید های همون روز رو توی یه فیلد بریزم و روز بعد بازدیدهاش توی فیلد تاریخ همون روز باشه!؟

shahab_ksh
جمعه 03 آبان 1387, 11:09 صبح
توضیح می دید؟؟؟




چجوری می تونم آخر هر روز بازدید های همون روز رو توی یه فیلد بریزم و روز بعد بازدیدهاش توی فیلد تاریخ همون روز باشه!؟


1- یه فیلد مثلا fld_nday در دیتابیس ایجاد کنید که تاریخ امروز رو نگه میداره (بعدا میگم این چطوری تغییر کنه)

2- یه فیلد مثلا fld_visitday که تعداد بازدید امروز رو نشون میده

3- حالا تست کنید اگه امروز برابر fld_nday بود یعنی بازدید مربوط به امروز است پس fld_visitday+1 کن
اگه امروز برابر fld_nday نبود یعنی پس روز بعد است بنابراین fld_nday رو برابر امروز کن و fld_visitday رو برابر صفر کن

4- تا اینجای کار میتونی بازدید امروز رو به دست بیاری حالا چطور میشه بازدید دیروز رو به دست آورد کاری نداره یه فیلد دیگه به اسم مثلا fld_yesterday بساز که در مرحله سوم زمانی که روز بعد شد قبل از اینکه fld_visitday رو برابر صفر کنه مقدار fld_visitday رو بگیره برابر fld_yesterday قرار بده

5- برای بازدید ماه هم همین سناریو رو میشه انجام داد

6- برای بازدید کل هم که از همه ساده تره با هر بار ورود یکی به بازدید کل که مثلا fld_total هست اضافه میشه

با این الگوریتم شما فقط یه سطر از بانک اطلاعاتی شما صرف میشه و با هر بار تغغیر همین یه سطر آپدیت میشه و نیازی نیست برای هر بازدید یه سطر به دیتابیستون اضافه بشه که غیر منطقی هست

vb_bmw
جمعه 03 آبان 1387, 17:29 عصر
1- یه فیلد مثلا fld_nday در دیتابیس ایجاد کنید که تاریخ امروز رو نگه میداره (بعدا میگم این چطوری تغییر کنه)

2- یه فیلد مثلا fld_visitday که تعداد بازدید امروز رو نشون میده

3- حالا تست کنید اگه امروز برابر fld_nday بود یعنی بازدید مربوط به امروز است پس fld_visitday+1 کن
اگه امروز برابر fld_nday نبود یعنی پس روز بعد است بنابراین fld_nday رو برابر امروز کن و fld_visitday رو برابر صفر کن

4- تا اینجای کار میتونی بازدید امروز رو به دست بیاری حالا چطور میشه بازدید دیروز رو به دست آورد کاری نداره یه فیلد دیگه به اسم مثلا fld_yesterday بساز که در مرحله سوم زمانی که روز بعد شد قبل از اینکه fld_visitday رو برابر صفر کنه مقدار fld_visitday رو بگیره برابر fld_yesterday قرار بده

5- برای بازدید ماه هم همین سناریو رو میشه انجام داد

6- برای بازدید کل هم که از همه ساده تره با هر بار ورود یکی به بازدید کل که مثلا fld_total هست اضافه میشه

با این الگوریتم شما فقط یه سطر از بانک اطلاعاتی شما صرف میشه و با هر بار تغغیر همین یه سطر آپدیت میشه و نیازی نیست برای هر بازدید یه سطر به دیتابیستون اضافه بشه که غیر منطقی هست

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

این روش چند تا ایراد بزرگ داره:
1 - اگه برنامه به مدت 1 سال کار کنه 365 تا رکورد داره ، فکر کنید که این اگه سایت در روز 1000 تا بازدید کننده داشته باشه چه زمانی برای پیدا کردن و آپدیت مقادیر وجود داره و حجم بار تحمیلی به سرور چه قدر میره بالا(البته در مورد سایت های کوچیک این مشکلی بزرگ نیست:لبخندساده:)

2 - فکر کنید دقیقا 10 کاربر با سرعت های کانکشن متفاوت به سایت متصل بشن! اگه همه در یک زمان واحد اطلاعات بازدید رو درخواست کنن مشکل خواندن اطلاعات نادرست(فکر کنم بهش می گن Ghost Read) برای اطلاعات پیش میاد و احتمال ذخیره نشدن اطلاعات بعضی افراد بالا می ره!

و ....

روش درست و اصولی مساله به نظر من همونه ولی این روش روشی سریع برای انجام محاسبات کاربران هستش!http://102.ir/yellow/8.gif

vb_bmw
جمعه 03 آبان 1387, 17:36 عصر
1-

با این الگوریتم شما فقط یه سطر از بانک اطلاعاتی شما صرف میشه و با هر بار تغغیر همین یه سطر آپدیت میشه و نیازی نیست برای هر بازدید یه سطر به دیتابیستون اضافه بشه که غیر منطقی هست


این حرف اشتباه هستش!

چون بار عملیات Update تشکیل شده از یه Select و یه Update پس ایراد داره!

با الگریتم شما ما 3 تا کار انجام میدیم»

1 - Select
2 -یک مقایسه
3 - آپدیت کاربران امروز
4 - آپدیت فیلد کاربر ماه!

درضمن شما با این کار درسته اطلاعات رو نگه میدارید ولی هر روز که عوض میشه شما یه بار اطلاعات فیلد ماه رو تکرار می کنید که از نظر طراحی دیتابیس ایراد داره!:چشمک:

shahab_ksh
جمعه 03 آبان 1387, 17:57 عصر
نه برادر عزیز بدون اینکه متوجه باشید و به دقت بخونید اظهار نظر کردید !

تمام این الگوریتم فقط و فقط یک رکورد داره که اون آپدیت میشه !

این الگوریتم رو سالها برای سازمانها و نهادهای دولتی که بیش از 100 بازدید آن واحدی داشتن انجام دادم و مشکلی نداره !



1 - اگه برنامه به مدت 1 سال کار کنه 365 تا رکورد داره ، فکر کنید که این اگه سایت در روز 1000 تا بازدید کننده داشته باشه چه زمانی برای پیدا کردن و آپدیت مقادیر وجود داره و حجم بار تحمیلی به سرور چه قدر میره بالا(البته در مورد سایت های کوچیک این مشکلی بزرگ نیست:لبخندساده:)

خوب متوجه نشدید این الگوریتم فقط دو فیلد و یک رکورد داره ! اگه تا آخر دنیا کار کنه



2 - فکر کنید دقیقا 10 کاربر با سرعت های کانکشن متفاوت به سایت متصل بشن! اگه همه در یک زمان واحد اطلاعات بازدید رو درخواست کنن مشکل خواندن اطلاعات نادرست(فکر کنم بهش می گن Ghost Read) برای اطلاعات پیش میاد و احتمال ذخیره نشدن اطلاعات بعضی افراد بالا می ره

باز هم اشتباه کردید وظیفه همزمانی کار DBMS هستش نه وظیفه شما !




چون بار عملیات Update تشکیل شده از یه Select و یه Update پس ایراد داره!
با الگریتم شما ما 3 تا کار انجام میدیم»
1 - Select
2 -یک مقایسه
3 - آپدیت کاربران امروز
4 - آپدیت فیلد کاربر ماه!

دوست عزیز تمام دنیا اطلاعات بازدید رو در دیتابیس ذخیره میکنن اگه شما چیز جدید کشف کردید بفرمایید




درضمن شما با این کار درسته اطلاعات رو نگه میدارید ولی هر روز که عوض میشه شما یه بار اطلاعات فیلد ماه رو تکرار می کنید که از نظر طراحی دیتابیس ایراد داره!

در ماه فقط یکبار آپدیت ماه انجام میشه !

milade
شنبه 04 آبان 1387, 05:52 صبح
سلام
اقا شهاب موضوع رو پیچیده کردی ها
به نظر من یه فیلد بزاره برای تاریخ و یکی یرای بازدید
حالا اگه تاریخ برابر امروز بود که هیچ و یکی اپ کنه (+1) ولی اگه نبود یه فیلد بسازه و توی اون اپ کنه همین!!!
(دستورات هم کمتر می شود!!!)(هر چند شبیه بود)
موفق و پیروز باشید

shahab_ksh
شنبه 04 آبان 1387, 11:11 صبح
اگه نبود یه فیلد بسازه و توی اون اپ کنه همین!!!

یه فیلد بسازه ! که چی بشه اینطوری که شما میگی یعنی هر روز یه فیلد به جدولتون اضافه میشه که !
شاید هم منظورتون یه رکورد بوده که باز هم بیهودست و بی دلیل یا من نفهمیدم یا بیشتر توضیح بده

svm-webmaster
شنبه 04 آبان 1387, 13:21 عصر
اگه نبود یه فیلد بسازه و توی اون اپ کنه همین!!!
احتمالا منظور شما یک رکورد بوده است.

شاید هم منظورتون یه رکورد بوده که باز هم بیهودست و بی دلیل یا من نفهمیدم یا بیشتر توضیح بده
بی دلیل و بیهوده نیست ، دوست عزیز روشی که شما گفته اید، فقط به درد این می خورد که تعداد بازدید های امروز را نگه دارید اما روشی که میلاد گفته است امکان گزارش گیری را برای مدیر سایت ایجاد می کند.
مدیر سایت با این روشی که میلاد گفته است می تواند بازدید های هر روز را ببیند، بازدیدهای از تاریخی تا تاریخی دیگر را ببیند. بیشترین بازدید در کدام روز بوده است را ببیند. کاربران سایت مثلا بازدید های 5 یا هر چند روز گذشته را ببینند یا هر نوع گزارش دیگری که با تعداد بازدید ها و تاریخ بازدید ها بشود گرفت.

shahab_ksh
شنبه 04 آبان 1387, 13:42 عصر
بی دلیل و بیهوده نیست ، دوست عزیز روشی که شما گفته اید، فقط به درد این می خورد که تعداد بازدید های امروز را نگه دارید اما روشی که میلاد گفته است امکان گزارش گیری را برای مدیر سایت ایجاد می کند.
مدیر سایت با این روشی که میلاد گفته است می تواند بازدید های هر روز را ببیند، بازدیدهای از تاریخی تا تاریخی دیگر را ببیند. بیشترین بازدید در کدام روز بوده است را ببیند. کاربران سایت مثلا بازدید های 5 یا هر چند روز گذشته را ببینند یا هر نوع گزارش دیگری که با تعداد بازدید ها و تاریخ بازدید ها بشود گرفت.


یک بار دیگه به عنوان تاپیک نگاه بفرمایید !


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


نمیدونم این چه رسم بدی توی فرام ها مد شده وقتی مطلبی راه حلی نوشته میشه بعضی ها فقط بلدن بی خود ایراد بگیرن خوب اگه راه بهترشو داری با تفصیل بگو هنوز الگوریتم رو نفهمیده نظر میدن یه چیز دیگه ازش در میارین بعدش یکی مثل آقای svm-webmaster پیدا میشه همین چیزی که درست فهمیده نشده رو سعی میکنه ارتقا بده ! خوب تو همین فرام افراد ماهر توی هم هست. به هر حال بحث درست علمی کنید و به عنوان بحث هم توجه کنید به هر حال منظورم اینه بحث رو بصورت علمی ادامه بدیم شما الگوریتم بهتری بدید بحث می کنیم

svm-webmaster
شنبه 04 آبان 1387, 13:59 عصر
یک بار دیگه به عنوان تاپیک نگاه بفرمایید !
دوست عزیز هیچ منطقی نمی گوید اگر بازدید امروز سایت را نگه می داریم باید امکان گزارش گیری از ان را نداشته باشیم یا به عبارتی اگر بازدید امروز را نگه می داریم در پایان روز اطلاعات ان را نابود کنیم چون تاریخ روز ما تغییر کرده است . ما باید با این دید به نگهداری آمار سایت بپردازیم که ، در آینده امکان استفاده از انها برای کارهای دیگر وجود داشته باشد. حتی اگر فعلا به بازدید هر روز نیاز داشته باشیم ، من که انها را برای آینده هم نگه می دارم. بارها برایم پیش آمده که کار را برای همان زمان طراحی کرده ام و کدها را برای همان زمان نوشته ام اما پس از مدتی کارفرما نظرش عوض شده و خواسته کار را گسترش دهد، اما به دلیل طراحی من که فقط زمان حال را دیده ام بسیاری از اطلاعات که با صرف زمان کمی می شد انها را حفظ کرد از بین رفته است. حالا این که طراح کار را با چه دیدی طراحی کند، روش نگهداری اطلاعاتش تغییر خواهد کرد.

shahab_ksh
شنبه 04 آبان 1387, 14:06 عصر
دوست عزیز هیچ منطقی نمی گوید اگر بازدید امروز سایت را نگه می داریم باید امکان گزارش گیری از ان را نداشته باشیم


این فقط و فقط به دید برنامه نویس بستگی داره بسیاری از سایت ها اطلاعات بازدید رو بصورت تفصیلی نگه نمی دارن چون لزومی نداره !



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

این بحث در مورد بازدید سایت صادق نیست

vb_bmw
شنبه 04 آبان 1387, 17:24 عصر
shahab_ksh (http://barnamenevis.org/forum/member.php?u=24304) عزیز من منظور شما رو کاملا فهمیدم و درکش کردم!

اگه دقت کنید من گفتم که الگریتم شما کاملا درسته!

ولی چون اینجا بخش توسعه ASP.Net هست باید درباره روش های کاملا درست استفاده کنیم!

من تا حالا شاید 100 ها کنترل مختلف برای این کار طراحی کردم ولی این روشی که گفتم از همه کارا تر بود!

در ضمن :

1 - DBMS که شما می فرمایید الان خود ما هستیم!

2 - اون آقای DBMS که می فرمایید هم باید برای این کار کد بنویسه و در نتیجه بازم سرعت رو کاهش میده چون مجبوره از Transaction استفاده کنه!

خوش حالم که یکی هست که حرف ادمو می فهمه و اشتباهم رو بهم میگه!ممنون

shahab_ksh
شنبه 04 آبان 1387, 19:53 عصر
1 - DBMS که شما می فرمایید الان خود ما هستیم!

2 - اون آقای DBMS که می فرمایید هم باید برای این کار کد بنویسه و در نتیجه بازم سرعت رو کاهش میده چون مجبوره از Transaction استفاده کنه!


DBMS یک فرد نیست سیستم مدیریت پایگاه داده هستش !

مسله هم زمانی در آپدیت خیلی وقته حل شده این مسله جزء درگیری های برنامه نویس نیست جز وظایف سیستم مدیریت پایگاه داده هستش که از چشم برنامه نویس پنهانه

vb_bmw
شنبه 04 آبان 1387, 21:20 عصر
من که خیلی با این مشکل دست و پنجه نرم میکنم!
هنوز هم ندیدم که این مشکل توسط سیستمی به طور خودکار رفع بشه!

silverfox
یک شنبه 05 آبان 1387, 15:39 عصر
من کاری که کردم اینه توی دیتابیس 2تا فیلد دارم pageview و date با چند تا رکورد!
date=total
توی این بازدید کل سایتمو ریختم
date=thismonth
توی ایم بازدید ایم ماهمو
date=lastmonth
توی اینم بازدید ماه قبل
و 31 رکورد از 1تا31 توی هر کدوم اینا هر روز بازدید های همون روز رو می ریزم و آخر ماهم 0شون می کنم

milade
دوشنبه 06 آبان 1387, 04:38 صبح
خوبه !
اما حواست باشه که ماههای 29 روزه رو نیاد اد کنه به روز 30 ام و باگ نده!
پ.ن:ببخشید در پست قبلم منظورم رکورد بود
موفق باشید

silverfox
دوشنبه 06 آبان 1387, 18:49 عصر
خوب یه سوتی که دادم اینه که وقتی روز اول ماهه نسبت به اینکه ماه قبل چند روزه بوده می ره بازدید های همه روز های اون ماهو 0 می کنه و بازدید ماه قبل رو می نویسه!حالا این کد توی سشن استارته یعنی روز اول ماه هرکی بیاد یه بار می ره بازدید هارو 0 میکنه در نتیجه روز اول ماه همیشه 1بازدید داره!چیکارش کنم که فقط یکبار 0 بکنه کلا چجوری می تونم یه فیلد بولین دیتابیس رو توی if استفاده کنم یعنی چجوری بخونمش؟!