2011-05-02 10 views
0

사용자가 응용 프로그램에 로그인 할 때 쿠키를 만드는 응용 프로그램이 있습니다. 쿠키는 다음 페이지에서 읽히며 사용자는 로그인 한 경우 해당 페이지에서 계속 처리 할 수 ​​있습니다 (쿠키 있음). 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 + "&nbsp;&nbsp;&nbsp; <a href='AcctInfo.aspx'>Update Account Info</a>&nbsp;&nbsp;&nbsp;<a href='TextAlerts.aspx'>Create/Update Text Alerts</a>&nbsp;&nbsp;&nbsp;<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() + "&nbsp;&nbsp;&nbsp;<a href='TextAlerts.aspx'>Create/Update Text Alerts</a>&nbsp;&nbsp;&nbsp;<a href='graphSetup.aspx'>Graphing</a>&nbsp;&nbsp;&nbsp;"; 
        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); 

답변

1

사용 피들러 또는 다른 HTTP를 감시자 도구 아래 코드를 사용해 설정처럼

+0

나는 이것에 동의한다. 바이올린을 사용하여 무슨 일이 일어나고 쿠키가 출력되는지보십시오. 코드는 괜찮아 보입니다. 그것이 작동하지 않아야하는 이유가 없습니다. –

+0

피 들러를 설치했고 결과를 보았습니다. IE에서 앱을 실행하면 login.aspx에 대한 GET을 얻은 다음 POST 및 쿠키가 설정됩니다 (응답 헤더 섹션에 있음). FF에서는 2 GET을 수신 한 다음 쿠키가 설정된 응답 헤더 (Response Headers)에서 1 POST를 수행 한 다음 요청 헤더 (Request Headers) 쿠키에서 GET을 설정하고 응답 헤더에서 쿠키를 지 웁니다. IE에서 1과 비교할 때 여러 GET이 발생하는 이유가 확실하지 않습니다. – TacticalTS

+0

원래의 질문 자체가 문제가 아닌 것처럼 보입니다. 쿠키는 올바르게 작동합니다. 서버에 의한 POST 응답으로 설정되고 브라우저에 의해 다음 요청으로 전송됩니다. 값을 변경하고 코드를 작성해야하는 경우가 아니면 서버가 응답에서 쿠키를 다시 보내지 않아야합니다. 추가 요청이 어디에서 왔는지 파악하고 잠재적으로 새로운 질문을해야합니다. (코드를 게시 할 때 더 작은 샘플을 만드는 것을 고려하십시오. 현재 샘플에는 문제와 관련없는 많은 코드가 포함되어 있습니다). –

0

는 것 같습니다. 코드 자체는 괜찮아 보입니다.

+0

TacticalTS의 샘플에서 만료를 설정하는 코드가 보이지 않습니다 ... 기본적으로 쿠키는 세션 쿠키이므로 브라우저가 열릴 때까지 만료되지 않습니다. –

+0

@Alexei - http://support.mozilla.com/en-US/questions/808831를 확인하십시오. 기본적으로 Firefox 4는 기본적으로 쿠키 정보를 기억하지 않습니다. Firefox 4의 새로운 기능입니다. – Johnv2020

+0

흥미 롭습니다. "기록 저장" 나는 내가 그것을 바꿨다고 생각하지 않는다. 하지만 내 4.0 버전의 버전을 통해 업그레이 드됩니다 - 파이어 폭스 기본값은 "절대"깨끗한 설치를 기억하지 못할 수 있습니다. @TacticalTS -이 설정을 확인하십시오. 문제가 될 수 있습니다. 또한 세션 쿠키 대신 쿠키를 영구 보존하는 것은 필요하지 않습니다. 좋은 수정 - 보안을 고려하여 변경하기 전에 필요한 것을 고려하십시오. –

관련 문제