문제

쿠키를 설정하는 다음 코드가 있습니다.

  string locale = ((DropDownList)this.LoginUser.FindControl("locale")).SelectedValue;
  HttpCookie cookie = new HttpCookie("localization",locale);
  cookie.Expires= DateTime.Now.AddYears(1);
  Response.Cookies.Set(cookie);

그러나 쿠키를 읽으려고 할 때 값은 널입니다. 쿠키가 존재합니다. 나는 다음을 지나치지 않는다.

         if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))

돕다?

도움이 되었습니까?

해결책

수표가 게시 된 후에 완료 되었습니까? 그렇다면 요청 컬렉션에서 쿠키를 대신 읽어야합니다.

쿠키는 응답에 추가하여 브라우저에 지속되며 request.cookies에서 다시 읽습니다.

응답에 추가 된 쿠키는 페이지가 동일한 요청에있는 경우에만 읽을 수 있습니다.

다른 팁

가장 가능성이 높은 대답이 나타납니다 이 게시물

reqest 대신 응답 객체를 사용하여 쿠키의 존재를 확인하려고 할 때 ASP.NET은 자동으로 쿠키를 만듭니다.

편집하다: 참고로, 나는 ASP.Net이 쿠키 API로 인해 악몽을 일으키는 쿠키의 존재를 확인 해야하는 소프트웨어를 작성했습니다. 결국 요청에서 쿠키를 가져 와서 상태를 개체하는 전환 프로세스를 작성했습니다. 요청이 끝나면 상태 객체를 쿠키로 다시 번역하고 응답에 넣습니다 (필요한 경우). 이것은 쿠키가 응답하는지 파악하고, 무의미한 쿠키 등을 피하기 위해 쿠키를 대신 업데이트 하려는지 알아 내려고 노력했습니다.

"응답"컬렉션 대신 피곤한 "요청"컬렉션이 있습니까?

if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))

답을 알고 있다고 생각합니다.

귀하의 작업 속성을 제거하십시오 <form> 꼬리표.

이것을처럼 보이십시오 : <form id="form1" runat="server">

대신 : <form id="form1" action="DisplayName.aspx" runat="server">

그런 다음 사용해야합니다 Response.Redirect("DisplayName.aspx"); 코드에서.

디버그 모드에서 컴파일하는 경우 해당 페이지를 추적하고 쿠키가 요청 컬렉션에 있는지 확인하십시오. ASPX 파일의 @Page 지시문에서 추적을 설정하십시오.

이 스 니펫을 사용해보십시오 -

string locale = ((DropDownList)this.LoginUser.FindControl("locale"))
                                                    .SelectedValue;  
HttpCookie myCookie = new HttpCookie("localization");
Response.Cookies.Add(myCookie);
myCookie.Values.Add("locale", locale);
Response.Cookies["localization"].Expires = DateTime.Now.AddYears(1);

& 읽으려면 -

if (Request.Cookies["localization"] != null)
{
   HttpCookie cookie = Request.Cookies["localization"];
   string locale = cookie.Values["locale"].ToString();
}

나는 비슷한 문제가 있었는데, 포스트 백에서 쿠키를 읽을 수 없었습니다. 나를위한 문제는 쿠키의 안전한 속성을 True로 확인했다는 것입니다. 쿠키의 보안 속성이 켜지면 연결이 보안 소켓 레이어를 사용하는 경우에만 쿠키가 전송됩니다. 그러나 SSL을 통해 전송하지 않았다는 점을 고려하면 처음으로 브라우저에서 쿠키를 어떻게 볼 수 있었는지 확실하지 않습니다. 어쨌든, 쿠키를 거짓으로 바꾸고, 문제를 해결하고, 쿠키를 후반에 읽었습니다.

이것이 당신의 문제에 대해 아무것도 할 필요가 없다면 죄송합니다. 나는 이것을 해결하는 방법을 찾고 있었기 때문에 이것을 공유하고 싶었습니다.

Chris Marisic의 답변에 이것을 댓글로 추가 할 것입니다. 그러나 나는 그 특권이 없습니다 :-(

Chris가 요청에서 쿠키 제거에 대한 편집에서 말한 것과 함께, 내가 한 포스트 백에서 새로 만든 쿠키 값을 읽을 수 있도록

Private Sub SetPageSize(ByVal pageSize As Integer)

    ' Set cookie value to pageSize
    Dim pageSizeCookie As HttpCookie = New HttpCookie(pageSizeCookieName)
    With pageSizeCookie
        .Expires = Now.AddYears(100)
        .Value = pageSize.ToString
    End With

    ' Add to response to save it
    Me.Response.Cookies.Add(pageSizeCookie)

    ' Add to request so available for postback
    Me.Request.Cookies.Remove(pageSizeCookieName)
    Me.Request.Cookies.Add(pageSizeCookie)

End Sub

request.cookies.remove 및 request.cookies.add 라인을 포스트 백에서 작동하게합니다.

response.cookies.add (쿠키)를 사용합니다. 응답 대신 .cookies.set (쿠키);

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top