PDA

View Full Version : مشکل چند بار اجرا شدن Session_Start



amir_monster1
چهارشنبه 14 خرداد 1393, 11:49 صبح
با سلام

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

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

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

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

ممنون میشم از راهنمایی دوستان

alireza.zahani
چهارشنبه 14 خرداد 1393, 12:11 عصر
کد داخل global تو ببینم

amir_monster1
چهارشنبه 14 خرداد 1393, 12:37 عصر
کد داخل global تو ببینم



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

Counter.AddUnique();

Application.UnLock();
}


کدی که فراخوانی میشه در session start



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();
}
}


مربوط به کد نیست چند تا کد دیگه را هم امتحان کردم اما این رویداد Session Start که چند بار اجرا میشه

در لوکال همه چیر درسته اما به روی هاست در بیشتر مواقع چند عدد اضافه میشه !

amir_monster1
چهارشنبه 14 خرداد 1393, 19:02 عصر
یعنی یک نفر نیست جوابی داشته باشه ؟!

alireza.zahani
چهارشنبه 14 خرداد 1393, 20:09 عصر
public class Global : System.Web.HttpApplication {


protected void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
}


protected void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
Application.UnLock();
}


protected void Application_BeginRequest(object sender, EventArgs e)
{

}


protected void Application_AuthenticateRequest(object sender, EventArgs e)
{


}


protected void Application_Error(object sender, EventArgs e)
{


}


protected void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
Application.UnLock();
}


protected void Application_End(object sender, EventArgs e)
{

}
}


گلوبالت رو اینطوری عوض کن

alireza.zahani
چهارشنبه 14 خرداد 1393, 20:12 عصر
مستر پیجتم داخل لودش اینطوری بشه
protected void Page_Load(object sender, EventArgs e) {
try
{

lblOnline.Text = Application["OnlineUsers"].ToString() + " نفر";
lblIP.Text = GetUser_IP();



System.Web.HttpBrowserCapabilities browser = Request.Browser;
lblBrowser.Text = browser.Browser;
lblWindows.Text = browser.Platform;
}


catch (Exception)
{


//throw;
}


}

alireza.zahani
چهارشنبه 14 خرداد 1393, 20:12 عصر
اینم برا گرفتن IP کاربر
protected string GetUser_IP() {
string VisitorsIPAddr = string.Empty;
if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
{
VisitorsIPAddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else if (HttpContext.Current.Request.UserHostAddress.Lengt h != 0)
{
VisitorsIPAddr = HttpContext.Current.Request.UserHostAddress;
}
return VisitorsIPAddr;
}

alireza.zahani
چهارشنبه 14 خرداد 1393, 20:15 عصر
موفق باشی amir_monster1 (http://barnamenevis.org/member.php?306110-amir_monster1)

amir_monster1
پنج شنبه 15 خرداد 1393, 02:08 صبح
خیلی ممنون از جواب علی رضا جان اما مشکل از کد نیست من حتی کد شما را هم امتحان کردم

مشکل اینه که Session_Start باید برای هر بازدید کاربر یک بار اجرا بشه و در مثال بالا یک عدد را اضافه کنه

اما برای من به صورت رندم از یک تا چند عدد برای یک کاربر اضافه میکنه
و هر برنامه ای که در رویداد session_start نوشته باشم به جای یک بار چند بار اجرا میشه !

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

فکرمیکنم در هاست باید مشکلی باشه یا تنظیم خاصی !

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

در ضمن من با mvc کار میکنم

alireza.zahani
پنج شنبه 15 خرداد 1393, 04:22 صبح
با پشتیبانی تماس بگیر ، اونا تیم برنامه نویس دارن