2010-11-19 4 views
1

아래 예제에서 쿠키 문제가 있습니다. 쿠키가 생성되고 내가 만든 후 디버그 지점을 넣으면 시계가있는 쿠키의 내용을 확인할 수 있습니다. 그러나 웹 사이트를 다시 시작할 때 쿠키가 여전히 있지만 비어 있고 모델을 만들지 않습니다 (모든 필드가 비어 있습니다.)이상한 MVC2 쿠키 문제

나는 주위를 둘러 보았고 response.Cookie 사용과 관련된 버그를 발견했습니다. 만료일은 없지만 나는 물건을 바꿨다. 그리고 그것은 비어있다. 내가 잘못한 일을하고 있거나 localhost를 사용하고 있기 때문에 이것이 무엇입니까? 난 당신이 문제를 trobleshoot해야한다고 생각

[HttpGet] 
    [Autorize] 
    public ActionResult ManagePaymentRun() 
    { 
      ViewData["currentAction"] = "Index"; 
      payments.AccountNo = Request.Cookies["FSCSPayments"]["AccountNo"]; 
      payments.SortCode = Request.Cookies["FSCSPayments"]["SortCode"]; 
      payments.FirstChequeNo = "2";// Request.Cookies["FSCSPayments"]["FirstChequeNo"]; 
      payments.FileName = Request.Cookies["FSCSPayments"]["FileName"]; 
      payments.FRN = Request.Cookies["FSCSPayments"]["FRN"]; 
      payments.JobNumber = Request.Cookies["FSCSPayments"]["JobNumber"]; 
      payments.StartRecNo = Request.Cookies["FSCSPayments"]["StartRecNo"]; 
      return View(payments); 
    } 

    internal void CreateCookie() 
    { 

     HttpCookie cookie = new HttpCookie("FSCSPayments"); 
     cookie.Values.Add("AccountNo", payments.AccountNo); 
     cookie.Values.Add("SortCode", payments.SortCode); 
     cookie.Values.Add("FirstChequeNo", payments.FirstChequeNo); 
     cookie.Values.Add("FileName", payments.FileName); 
     cookie.Values.Add("FRN", payments.FRN); 
     cookie.Values.Add("JobNumber", payments.JobNumber); 
     cookie.Values.Add("StartRecNo", payments.StartRecNo); 
     cookie.Expires = DateTime.Now.AddDays(14); 
     cookie.Path = "/"; 
     Request.Cookies.Add(cookie); 
    } 
+1

쿠키에 대한 만료 날짜가 설정되지 않은 경우 세션 레벨 쿠키가 설정되며 일반적으로 브라우저가 닫히거나 세션이 종료 될 때 (특정 브라우저에 따라 다름) 일반적으로 삭제됩니다. 어디에서 CreateCookie()를 호출하고 있습니까? 웹 사이트를 다시 시작하고 쿠키가 있다고 말하면 무엇을 의미합니까? 브라우저의 쿠키 캐시에서 찾을 수 있습니까? 쿠키가 지속되면 서버의 중지 및 시작과 독립적입니다. –

+0

쿠키 캐시를 검색하면 그 쿠키가 있습니다. 내 쿠키에 요일을 추가 했으므로 세션 쿠키가 올바르지 않아야합니까? createcookie는 ManagePaymentRun HttpPost 액션에서 호출되며, 쿠키 생성시 디버그 포인트를 설정하고 거기에 전달합니다. – Andy

답변

0

. 우리는 지금이 프로젝트를 IIS7 PC에 복사했고 우리는 쿠키를 작동 시켰습니다.

0

, 나는 세 제안이 있습니다

1) cookie.Expires = DateTime.Now.AddDays (14);

2) 내가 예외가

3

을 제기 생각 althoug하지 cookie.path 지정), 일부 문자 키 .Add (값) 값은 안전해야 조심

하지만, 내 내기가 처음이야.

+0

네, 첫 번째 요점에 동의합니다. OP는 쿠키를 호출합니다 .Expires.AddDays (14); 이 값을 다시 cookie.Expires에 할당하지는 않습니다. 그 쿠키를 추측하고 있습니다. 만료는 심지어 DateTime.MinValue로 초기화 될 수도 있습니다. –

+0

나는 1과 3을 시험해 보았다. 모든 필드에 16을 더한다. 그래서 이상한 요소가 없을 것이다. 그러나 경로를 추가 할 때 해당 경로에서 쿠키를 찾지 못합니다. – Andy

1
cookie.Path = "C:\\Documents and Settings\\Andy\\Cookies"; 

귀하가 생각하는대로하기위한 것이 아닙니다. 쿠키가 클라이언트 컴퓨터에 저장 될 위치를 지정할 수 없습니다. 그건 절대적으로 브라우저에 달려 있고 그걸 통제 할 권한이 없습니다. 이 쿠키의 액세스를 사이트의 특정 부분으로 제한하는 것입니다. 따라서 제한을 원하지 않으면 단순히 cookie.Path = "/"으로 설정하십시오.

귀하의 ManagePaymentRun 조치 방법이 이상하게 보입니다. 왜 [Autorize] 속성이있을 때 사용자가 인증 여부를 테스트 :

이 문제로 인해 내가 IIS 5와 MVC를 사용한다는 사실에 해결하고 있었다됩니다
[HttpGet] 
[Authorize] 
public ActionResult ManagePaymentRun() 
{ 
    ViewData["currentAction"] = "Index"; 
    var payments = new Payments(); 
    payments.AccountNo = Request.Cookies["FSCSPayments"]["AccountNo"]; 
    payments.SortCode = Request.Cookies["FSCSPayments"]["SortCode"]; 
    payments.FirstChequeNo = "2";// Request.Cookies["FSCSPayments"]["FirstChequeNo"]; 
    payments.FileName = Request.Cookies["FSCSPayments"]["FileName"]; 
    payments.FRN = Request.Cookies["FSCSPayments"]["FRN"]; 
    payments.JobNumber = Request.Cookies["FSCSPayments"]["JobNumber"]; 
    payments.StartRecNo = Request.Cookies["FSCSPayments"]["StartRecNo"]; 
    return View(payments); 
} 
+0

전에 Authorize 속성에 대해 들어 본 적이 없지만 지금 추가했습니다. 좋아. – Andy