C# 无法读取cookie
我在我的网站上使用asp.net文化以不同的语言显示网站,即荷兰语(nl)和法语(fr)。该站点有一个按钮,通过将?lang=nl添加到该站点的url,将该站点更改为另一种语言。更改语言时,会保存cookie,以便下次访问时保留该语言 由于某些原因,该站点将看不到cookie。cookie就在那里,并被发送到服务器,我与fiddler进行了检查。有时其值为null,有时为空字符串 这是我在basepage类中使用的代码:C# 无法读取cookie,c#,asp.net,cookies,culture,C#,Asp.net,Cookies,Culture,我在我的网站上使用asp.net文化以不同的语言显示网站,即荷兰语(nl)和法语(fr)。该站点有一个按钮,通过将?lang=nl添加到该站点的url,将该站点更改为另一种语言。更改语言时,会保存cookie,以便下次访问时保留该语言 由于某些原因,该站点将看不到cookie。cookie就在那里,并被发送到服务器,我与fiddler进行了检查。有时其值为null,有时为空字符串 这是我在basepage类中使用的代码: protected override void InitializeCul
protected override void InitializeCulture()
{
if (!Page.IsPostBack)
{
string cookieLang = "";
try
{
cookieLang = HttpContext.Current.Request.Cookies["UserSettings"]["lang"];
}
catch (Exception e)
{
Response.Write(string.Format("<!-- {0} -->", e.Message));
}
if (!string.IsNullOrEmpty(Request.QueryString["lang"]))
{
cookieLang = Request.QueryString["lang"].ToLower();
}
if (!string.IsNullOrEmpty(cookieLang))
{
string selectedCulture = cookieLang == "fr" ? "fr-BE" : "nl-BE";
this.Lang = cookieLang;
UICulture = selectedCulture;
Culture = selectedCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedCulture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedCulture);
Response.Cookies["UserSettings"]["lang"]= Lang;
Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(7);
}
base.InitializeCulture();
}
}
protectedoverride void InitializeCulture()
{
如果(!Page.IsPostBack)
{
字符串cookieLang=“”;
尝试
{
cookieLang=HttpContext.Current.Request.Cookies[“UserSettings”][“lang”];
}
捕获(例外e)
{
Write(string.Format(“,e.Message));
}
如果(!string.IsNullOrEmpty(Request.QueryString[“lang”]))
{
cookieLang=Request.QueryString[“lang”].ToLower();
}
如果(!string.IsNullOrEmpty(cookieLang))
{
字符串selectedCulture=cookieLang==“fr”?“fr BE”:“nl BE”;
this.Lang=cookieLang;
UICulture=选定的文化;
文化=选择的文化;
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(selectedCulture);
Thread.CurrentThread.CurrentUICulture=新文化信息(selectedCulture);
响应。Cookies[“UserSettings”][“…lang”]=lang;
Response.Cookies[“UserSettings”].Expires=DateTime.Now.AddDays(7);
}
base.InitializeCulture();
}
}
有人能告诉我我做错了什么吗
编辑:
当我在本地pc上测试时,我忘了告诉你这段代码可以正常工作,但在服务器上部署时它不工作。我认为你的错误在于如何处理cookie和事件顺序
- 步骤1:尝试从cookie中获取区域性名称。如果它存在,请记住它
- 步骤2:尝试从查询字符串中获取区域性名称。如果它存在,请记住它
- 步骤3:基于上一步设置当前区域性
- 步骤4:在cookie中保存区域性名称
protected override void InitializeCulture()
{
var cultureName = string.Empty;
// Step 1
var cookie = this.Request.Cookies["culture"];
if (cookie != null)
{
cultureName = cookie.Value;
}
// Step 2
var query = this.Request.QueryString["culture"];
if (query != null)
{
cultureName = query;
}
// Step 3
var culture = new CultureInfo(cultureName);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
// Step 4
this.Response.Cookies["culture"].Value = culture.Name;
base.InitializeCulture();
}
由于您的代码在本地服务器上工作,而不是在部署的服务器上工作,因此您还可以检查以下事项
谢谢。我在web.config中使用url重写。这可能与此有关吗?当我在url中使用参数时,区域性切换确实起作用。问题是饼干总是空的。我确信顺序是正确的。你的代码破坏了整个页面。我的代码中有一个错误(我在最后设置的cookie的名称是错误的)。