최근 H5는 윈도우 운영체제이기 때문에 개발과 디버깅을 용이하게 하기 위해 크롬 브라우저에서 직접 테스트를 진행한 후, 안드로이드 기기에서 모바일 테스트를 진행했습니다. 기본적으로 기능이 완성된 상태에서 원래 안드로이드 기기에서 테스트를 하였는데, iOS에서는 정상적으로 실행이 되었는데, 조사 결과에 따르면 관련 정보를 얻을 수 없는 것으로 나타났습니다. 쿠키에 값이 없기 때문입니다.
처음에는 쿠키에 있는 한자가 깨져 있는 문제인 줄 알았습니다. 나중에 추적해 보니 쿠키의 값이 전혀 성공적으로 할당되지 않은 것으로 나타났습니다. 온라인에서 정보를 확인한 결과 Safari에서는 그렇지 않은 것으로 나타났습니다. ASCII가 아닌 인코딩된 값을 허용합니다. 즉, 중국어 저장이 허용되지 않습니다.
이 문제를 해결하려면 쿠키 값을 먼저 인코딩한 다음 값을 얻을 때 디코딩해야 합니다.
백엔드는 asp.net을 사용하여 쿠키를 설정하고, 프런트엔드는 Javascript를 사용하여 쿠키를 얻습니다. 인코딩과 디코딩이 일관될 수 있나요? 현재는 시도해 볼 수 밖에 없습니다:
여러 가지 방법을 시도한 결과 HttpUtility.UrlEncode()를 사용하여 인코딩에 성공한 것으로 나타났습니다.
<span style="color: #008080;">1</span> cookie = <span style="color: #0000ff;">new</span> HttpCookie(<span style="color: #800000;">"</span><span style="color: #800000;">rdname</span><span style="color: #800000;">"</span><span style="color: #000000;">); </span><span style="color: #008080;">2</span> cookie.Value =<span style="color: #000000;"> HttpUtility.UrlEncode(user.RegisterDeptName); </span><span style="color: #008080;">3</span> cookie.Expires = System.DateTime.Now.AddDays(<span style="color: #800080;">30</span><span style="color: #000000;">); </span><span style="color: #008080;">4</span> context.Response.Cookies.Set(cookie);
클라이언트측 Javascript는 다음과 같이 디코딩됩니다.
<span style="color: #008080;">1</span> <span style="color: #0000ff;">var</span> deptName = cookie('<span style="color: #800000;">rdname</span>'<span style="color: #000000;">); </span><span style="color: #008080;">2</span> deptName=<span style="color: #000000;"> decodeURIComponent(deptName); </span><span style="color: #008080;">3</span> $("#pickerlb").val(deptName);
즉, Javascript의 decodeURIComponent()와 C#의 HttpUtility.UrlEncode()가 쌍을 이룹니다.