مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

Mohsen27

عضویت از 1392/10/11

مشکل چند بار اجرا شدن Session_Start

  • دوشنبه 28 مهر 1393
  • 15:00
تشکر میکنم

با سلام

من یک آمارگیر برای سایتم نوشتم که باهر بار ایجاد Session یک کد در برنامه فراخوانی میشه که وظیفه اون کد اینه که یک عدد به تعداد بازدید اضافه میکنه و همچنین یک سطر جدبد اضافه میکنه که اطلاعاتی در مورد نوع مرورگر کاربر و غیره است

حالا مشکل اینه که با هر بار اجرای ()Session_Start به جای یک سطر چند سطر در همان لحظه اضافه میشه !
و Session_Start چند بار در یک لحظه اجرا میشه!

البته متغیر است بعضی وقت ها همان یک سطر اضافه میشود اما در بیشتر مواقع 2 یا 3 یا بیشتر برای یک بازدید !

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

()private Counter Counter = new Counter ;
protected void Session_Start(object sender, EventArgs e)
{
    ()Application.Lock
 
        ();Counter.AddUnique
    
    ();Application.UnLock
}

 

public void AddUnique

      {

          DateTime PDate = DateTime.UtcNow.AddHours(+3.5);

 

          using (var cn = new SqlConnection(Cn.CnString()))

          {

              using (SqlCommand cmd = new SqlCommand("AddHits", cn))

              {

                  cmd.CommandType = CommandType.StoredProcedure;

 

                  cmd.Parameters.Add("@PDate", SqlDbType.DateTime).Value = PDate;

 

                  cn.Open();

                  cmd.ExecuteNonQuery();

                  cn.Close();

              }

          }

پاسخ های این پرسش

تعداد پاسخ ها : 3 پاسخ
کاربر سایت

پوریا غلامی

عضویت از 1393/05/25

  • دوشنبه 28 مهر 1393
  • 18:26

با سلام

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

 

کاربر سایت

Mohsen27

عضویت از 1392/10/11

  • پنجشنبه 1 آبان 1393
  • 13:13

با تشکر از پاسخ شما..

راه حل جیست؟

کاربر سایت

پوریا غلامی

عضویت از 1393/05/25

  • جمعه 2 آبان 1393
  • 23:43

ابتدا ای پی رو چک کن که اگر از سمت گوگل نبود اونموقع به دیتابیت اضافه کن:

از این دو متد برای چک کردن ای پی می تونی استفاده کنی:


        public static bool IPInRang(string IP, string fromIP, string toIP)
        {
            List<string> ip = IP.Split('.').ToList();
            List<string> fip = fromIP.Split('.').ToList();
            List<string> tip = toIP.Split('.').ToList();
            if ((ip.Count() != 4) || (fip.Count() != 4) || (tip.Count() != 4))
                return false;
            bool inRange = false;
            try
            {
                long start = IP2Long(fromIP);
                long end = IP2Long(toIP);
                long ipAddress = IP2Long(IP);

                inRange = (ipAddress >= start && ipAddress <= end);
            }
            catch
            {
                return false;

            }
            return inRange;
        }

        public bool Visit_Add(string IP)
        {
            if (IPInRang(IP, "66.249.65.0", "66.249.65.255")) //google
                return false;
            if (Visit_OnlineIP(IP))
                return false;
            else
            {
         
                return true;
            }

        }

 

من از این دو متد توی یکی از پروژهام قبلا استفاده کردم که جواب داده بود

امیدوارم کمکتون کنه

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)