사용자가 응용 프로그램에 로그인 할 때 쿠키를 만드는 응용 프로그램이 있습니다. 쿠키는 다음 페이지에서 읽히며 사용자는 로그인 한 경우 해당 페이지에서 계속 처리 할 수 있습니다 (쿠키 있음). IE 8.0에서 앱을 실행할 때 쿠키는 예상대로 응답합니다. VS2008을 통해 응용 프로그램을 실행하면 예상대로 쿠키가 응답합니다. Firefox 4.0에서 응용 프로그램을 실행할 때 다음 페이지에서 쿠키가 유효하지 않습니다. 여기 IE 및 Firefox에서 쿠키 처리
여기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";
}
}
}
}
이
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;
}
}
}
}
쿠키 파이어 폭스에서 사용할 수 있습니다 acctinfo.aspx.cs 내 다음 페이지의로드시에 내 코드 내 쿠키의 코드 설정 때문에 쿠키를 파일에서 저장하고 별도의 파일에 저장하고 해당 파일을 탐색 한 다음 AcctInfo를 탐색하여 예상대로 작동하는 코드를 제거 할 수 있습니다.
도움을 주시면 감사하겠습니다.
감사합니다. 쿠키가 immeadiatly 만료 실제로 브라우저에 보내기/상황을 확인하기 위해
HttpCookie cookie = new HttpCookie("Email");
cookie.Value = txtEmail.Text;
DateTime dtNow = DateTime.Now;
cookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(cookie);
나는 이것에 동의한다. 바이올린을 사용하여 무슨 일이 일어나고 쿠키가 출력되는지보십시오. 코드는 괜찮아 보입니다. 그것이 작동하지 않아야하는 이유가 없습니다. –
피 들러를 설치했고 결과를 보았습니다. IE에서 앱을 실행하면 login.aspx에 대한 GET을 얻은 다음 POST 및 쿠키가 설정됩니다 (응답 헤더 섹션에 있음). FF에서는 2 GET을 수신 한 다음 쿠키가 설정된 응답 헤더 (Response Headers)에서 1 POST를 수행 한 다음 요청 헤더 (Request Headers) 쿠키에서 GET을 설정하고 응답 헤더에서 쿠키를 지 웁니다. IE에서 1과 비교할 때 여러 GET이 발생하는 이유가 확실하지 않습니다. – TacticalTS
원래의 질문 자체가 문제가 아닌 것처럼 보입니다. 쿠키는 올바르게 작동합니다. 서버에 의한 POST 응답으로 설정되고 브라우저에 의해 다음 요청으로 전송됩니다. 값을 변경하고 코드를 작성해야하는 경우가 아니면 서버가 응답에서 쿠키를 다시 보내지 않아야합니다. 추가 요청이 어디에서 왔는지 파악하고 잠재적으로 새로운 질문을해야합니다. (코드를 게시 할 때 더 작은 샘플을 만드는 것을 고려하십시오. 현재 샘플에는 문제와 관련없는 많은 코드가 포함되어 있습니다). –