我有一个应用程序,当用户登录到应用程序时创建一个cookie。随后页面读取该cookie,并允许用户在这些页面上继续处理这些页面(cookie存在)。当我在IE 8.0上运行我的应用程序时,cookie会按照我的预期进行响应。当我通过VS2008运行我的应用程序时,cookie会按照我的预期进行响应。当我在Firefox 4.0中运行我的应用程序时,该Cookie在我的下一页上无效。处理IE和Firefox中的Cookie
这里是我的Cookie代码设置
protected void btnLogin_Click(object sender, EventArgs e)
{
if (CheckFields())
{
string strSQL;
sqlUserInfo.SelectParameters.Clear();
strSQL = "SELECT FirstName, LastName, Email FROM UserInfo WHERE [email protected] AND [email protected]";
sqlUserInfo.SelectCommand = strSQL;
if (txtEmail.Text != "")
{
sqlUserInfo.SelectParameters.Add("email", txtEmail.Text);
sqlUserInfo.SelectParameters.Add("password", txtPassword.Text);
DataView dv = (DataView)sqlUserInfo.Select(DataSourceSelectArguments.Empty);
if (dv.Table.Rows.Count > 0)
{
string welcomeMsg = "Welcome back " + dv[0][0] + " " + dv[0][1] + "!";
HttpCookie cookie = new HttpCookie("Email");
cookie.Value = txtEmail.Text;
DateTime dtNow = DateTime.Now;
Response.Cookies.Add(cookie);
lblMenu.Text = welcomeMsg + " <a href='AcctInfo.aspx'>Update Account Info</a> <a href='TextAlerts.aspx'>Create/Update Text Alerts</a> <a href='graphSetup.aspx'>Graphing</a>";
lblMessage.Text = "";
btnLogin.Enabled = false;
btnLogoff.Enabled = true;
}
else
{
lblMessage.Text = "Login Unsuccessful";
}
}
}
}
这里是我的代码在我的下一个页面的加载是acctinfo.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
cookie = Request.Cookies["Email"];
if (cookie == null)
{
lblMessage.Text = "Not logged in. <a href='login.aspx'>Login</a>";
lbLogoff.Visible = false;
}
else
{
EnableControls();
string strSQL;
sqlUserInfo.SelectParameters.Clear();
strSQL = "SELECT FirstName, LastName, Email, Password, PhoneNumber, Provider FROM UserInfo WHERE [email protected]";
sqlUserInfo.SelectCommand = strSQL;
sqlUserInfo.SelectParameters.Add("email", cookie.Value.ToString());
DataView dv = (DataView)sqlUserInfo.Select(DataSourceSelectArguments.Empty);
if (dv.Table.Rows.Count > 0)
{
oldPass = dv[0][3].ToString();
oldPhone = dv[0][4].ToString();
oldProvider = dv[0][5].ToString();
if (!IsPostBack)
{
txtPassword.Text = oldPass;
txtPassword2.Text = oldPass;
txtPhone.Text = oldPhone;
lstProvider.SelectedValue = oldProvider;
strMenu = "Welcome " + dv[0][0].ToString() + " " + dv[0][1].ToString() + " <a href='TextAlerts.aspx'>Create/Update Text Alerts</a> <a href='graphSetup.aspx'>Graphing</a> ";
lblMenu.Text = strMenu;
}
}
}
}
Cookies是在Firefox中启用,因为我可以从保存的文件中删除保存cookie的代码,将其放入单独的文件中,浏览该文件,然后浏览我的AcctInfo,并按预期工作。
任何帮助将不胜感激。
谢谢!
我同意这一点。使用小提琴来查看发生了什么以及如何输出cookie。代码看起来很好。没有理由为什么它不应该工作 – 2011-05-02 23:38:13
我安装了提琴手,这里是我注意到看结果。当我在IE上运行我的应用时,我得到了login.aspx的GET,然后设置了POST和cookie(在Response Headers部分中)。在FF中,我收到2个GET和1个POST,其中cookie被设置(在响应头中),然后GET(在请求头部cookie中设置),并在响应头中cookie已被清除。我不确定为什么会有多个GET发生,而IE只有1个? – TacticalTS 2011-05-03 14:30:48
看起来像原始问题本身被解决为非问题:Cookie正常工作 - 由服务器设置POST响应,并通过浏览器发送下一个请求。服务器不应该在响应中重新发送cookie,除非您需要修改值并且有代码来执行此操作。 你需要弄清楚你的额外请求来自哪里,并可能提出新的问题。 (考虑在发布代码时创建更小的样本 - 您当前的样本包含大量与您无关的代码)。 – 2011-05-03 15:58:14