如何在global.asax中设置默认cookie值?

时间:2013-08-07 08:11:33

标签: c# asp.net .net

我想为访问该网站的每个用户创建一个Cookie并为其设置默认值。 cookie是用英语启动网站,以后用户可以根据自己的喜好更改语言。

我在global.asax

中这样做
        HttpCookie myCookie = new HttpCookie("Language"); 
        myCookie.Value = "EN";
        myCookie.Expires = DateTime.Now.AddDays(1d);
        HttpContext.Current.Response.Cookies.Add(myCookie);

我尝试在以下事件中使用上述代码,

Application_Start
Application_BeginRequest
Session_Start

在上述所有三个事件中,为每个页面加载将cookie值设置为“EN”。不应该是这种情况。当用户选择其他语言时,必须将语言设置为HttpCookie(“语言”)。

2 个答案:

答案 0 :(得分:1)

你应该首先检查cookie是否已经定义..是否已经设置你不需要再设置它..当用户选择一种新语言时,那时你才应该重新定义它..一般算法,操作顺序如下

  
      
  • 如果用户正在更改语言   
        
    • 将应用程序的语言更改为所选的
    •   
    • 将其保存到Cookie
    •   
  •   
  • 如果先前的设置已保存在cookie中,则为else   
        
    • 将应用程序的语言更改为保留的
    •   
  •   
  • 然后是新访问   
        
    • 将应用程序的语言更改为默认语言
    •   
    • 将Cookie设置为默认值
    •   
  •   

这应该在每个请求中进行评估..因为用户可以在任何页面更改语言。 所以放置代码的正确事件应该是Application_BeginRequest

这是你的代码..我在CurrentUICulture中保存语言参数,因此不仅可以在应用程序的任何地方查询,而且框架也使用它来自定义格式..也是我假设用户可以传递一个名为lang的参数,该参数包含他想要的语言。

void Application_BeginRequest(object sender, EventArgs e) 
{
    //if user is changing language
    if(!String.IsNullOrEmpty(HttpContext.Current.Request["lang"]))
    {
        String sLang =  HttpContext.Current.Request["lang"] as String;
        //change the language of the application to the chosen
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(sLang);
        //save it to cookie
        HttpCookie myCookie = new HttpCookie("Language"); 
        myCookie.Value = sLang;
        myCookie.Expires = DateTime.Now.AddDays(1d);
        HttpContext.Current.Response.Cookies.Add(myCookie);
    }
    //setting as been preserved in cookie
    else if(HttpContext.Current.Request.Cookies["Language"])
    {
        //change the language of the application to the preserved
        String sLang =  HttpContext.Current.Request.Cookies["lang"].value as String;
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(sLang);
    }
    else//new visit
    {
        //change the language of the application to the default
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");
        //set cookie to the default
        HttpCookie myCookie = new HttpCookie("Language"); 
        myCookie.Value = "en-us";
        myCookie.Expires = DateTime.Now.AddDays(1d);
        HttpContext.Current.Response.Cookies.Add(myCookie);
    }
}

答案 1 :(得分:0)

您需要编写代码以将Cookie值更新为用户选择的内容。当您说“当用户选择其他语言”时,无论何时,您需要从集合中检索该cookie,请在那里更新cookie值。只有这样,它才能以你需要的方式工作。