无法从aspx.net中的静态函数将值设置为会话

本文关键字:设置 会话 静态函数 aspx net | 更新日期: 2023-09-27 18:20:15

hi我正在从客户端调用一个静态web方法

[WebMethod(EnableSession = true)]
    public static CrmClientReturn check_CrmClient_Exists_With_CrmClient(string Email, string Password)
    {
                    int result = 0;
        try
        {
            result = CommonFunctions.CheckNumberOfEnters();

然后我试图确定用户调用该方法的次数,但每次我都将计数器的Session值设置为null(即使尝试了几次),我做错了什么??

public static int CheckNumberOfEnters()
{
    int result = 0;
    int counter = 0;
    DateTime TimeCounter;
    try
    {
        if (HttpContext.Current.Session["counter"] != null)
        {
            counter = int.Parse(HttpContext.Current.Session["counter"].ToString());
            counter++;
        }
        else
        {
            HttpContext.Current.Session.Add("counter", counter);
        }
        if (counter < int.Parse(ConfigurationManager.AppSettings["LoginTry"].ToString()) + 1)
        {
            result = 1;
            HttpContext.Current.Session["counter"] = counter;
        }
        else
        {
            if (counter < int.Parse(ConfigurationManager.AppSettings["LoginTry"].ToString()) + 4)
            {
                result = -1;
                HttpContext.Current.Session["counter"] = counter;
            }
            else
            {
                HttpContext.Current.Session["counter"] = counter;
                if (HttpContext.Current.Session["TimeCounter"] != null)
                {
                    TimeCounter = DateTime.Parse(HttpContext.Current.Session["TimeCounter"].ToString());
                }
                else
                {
                    HttpContext.Current.Session.Add("TimeCounter", DateTime.Now);
                    TimeCounter = DateTime.Now;
                }
                TimeSpan ts = DateTime.Now - TimeCounter;
                if (ts.TotalMinutes >= int.Parse(ConfigurationManager.AppSettings["LogINTryMinuts"].ToString()))
                {
                    HttpContext.Current.Session["TimeCounter"] = null;
                    result = 1;
                    counter = 0;
                    HttpContext.Current.Session["counter"] = counter;
                }
                else
                {
                    result = 0;
                }
            }
        }
    }
    catch (Exception ex)
    {
        ErrorLoging.InsertLogError("BasePage.aspx", "CheckNumberOfEnters fail", ex.ToString(), "", 0);
    }
    return result;
}

在我将代码上传到测试站点后,它运行得很好但在本地主机上,我有错误的行为有人能解释一下吗

无法从aspx.net中的静态函数将值设置为会话

我看到了问题,在第一个if块中增加计数器后,需要更新会话变量。

更改此项:

        if (HttpContext.Current.Session["counter"] != null)
        {
            counter = int.Parse(HttpContext.Current.Session["counter"].ToString());
            counter++;                 
        }

到此:

        if (HttpContext.Current.Session["counter"] != null)
        {
            counter = int.Parse(HttpContext.Current.Session["counter"].ToString());
            counter++;
            HttpContext.Current.Session["counter"] = counter;
        }

所以,CheckNumberOfEnters应该是这样的(我已经测试过了,它按预期工作):

public static int CheckNumberOfEnters()
        {
            int result = 0;
            int counter = 0;
            DateTime TimeCounter;
            try
            {
                if (HttpContext.Current.Session["counter"] != null)
                {
                    counter = int.Parse(HttpContext.Current.Session["counter"].ToString());
                    counter++;
                    HttpContext.Current.Session["counter"] = counter;
                }
                else
                {
                    HttpContext.Current.Session.Add("counter", counter);
                }
                if (counter < int.Parse(ConfigurationManager.AppSettings["LoginTry"].ToString()) + 1)
                {
                    result = 1;
                    HttpContext.Current.Session["counter"] = counter;
                }
                else
                {
                    if (counter < int.Parse(ConfigurationManager.AppSettings["LoginTry"].ToString()) + 4)
                    {
                        result = -1;
                        HttpContext.Current.Session["counter"] = counter;
                    }
                    else
                    {
                        HttpContext.Current.Session["counter"] = counter;
                        if (HttpContext.Current.Session["TimeCounter"] != null)
                        {
                            TimeCounter = DateTime.Parse(HttpContext.Current.Session["TimeCounter"].ToString());
                        }
                        else
                        {
                            HttpContext.Current.Session.Add("TimeCounter", DateTime.Now);
                            TimeCounter = DateTime.Now;
                        }
                        TimeSpan ts = DateTime.Now - TimeCounter;
                        if (ts.TotalMinutes >= int.Parse(ConfigurationManager.AppSettings["LogINTryMinuts"].ToString()))
                        {
                            HttpContext.Current.Session["TimeCounter"] = null;
                            result = 1;
                            counter = 0;
                            HttpContext.Current.Session["counter"] = counter;
                        }
                        else
                        {
                            result = 0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorLoging.InsertLogError("BasePage.aspx", "CheckNumberOfEnters fail", ex.ToString(), "", 0);
            }
            return result;
        }

请使用int.TryParse而不是int.Parse

if (HttpContext.Current.Session["counter"] != null)
{
     int.TryParse(HttpContext.Current.Session["counter"].ToString(),counter);
     counter++;
}