백엔드 플랫폼에 상관없이 쿠키 값을 인코딩/디코딩하는 데있어 표준이 무엇인지 (또는 어떤 것이 있습니까?) 알아 내기가 어려워요. RFC 2109 따르면언어 불가 지론 쿠키 인코딩/디코딩 표준
:
값이 사용자 에이전트 불투명 및 발신 서버는 아마도 서버 선택된 인쇄 ASCII 인코딩으로 전송하도록 선택하는 것이 될 수있다. "불투명"은 내용이 원 서버에만 관련되어 있다는 것을 의미합니다. 실제로 내용은 Set-Cookie 헤더를 검사하는 모든 사람이 읽을 수 있습니다.
"서버는 상사"처럼 들리며 인코딩이 적용되는 모든 사항을 결정합니다. 따라서 PHP 백엔드에서 쿠키를 설정하고 파이썬이나 자바 등에서 쿠키를 읽는 일은 거의 어렵습니다. 양쪽 모두 수동으로 인코딩/디코딩 처리를하지 않아도됩니다.
값을 인코딩해야한다고 가정 해 봅시다. 러시아어 /"печенье (*} значения"/
은 "쿠키 값"을 의미하며 여기에 영숫자가 아닌 문자가 추가로 포함됩니다.
파이썬 :
거의 모든 WSGI 서버가 동일한을 수행하고/많은 말한다하더라도 octal literals에서 디코딩에 인코딩 파이썬의 SimpleCookie 클래스를 사용 ECMA-262, 엄격 모드에서 octal literals are depreciated 그. WTF?
그래서, 우리의 원시 쿠키 값은"/\"\320\277\320\265\321\207\320\265\320\275\321\214\320\265 (*} \320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\"/"
Node.js를가된다 :
모두에서 테스트하지 않았하지만 난 그냥 자바 스크립트 백엔드 기본 encodeURIComponent 및 decodeURIComponent 기능을 할 것 같은데요 hexadecimal 이스케이프/이스케이프 해제를 사용하고 있습니까?
PHP :
PHP 정확히 동일하지 encodeURIComponent 유사하지만 쿠키 값에 urlencode을 적용합니다.
이렇게 원시 값이됩니다. %2F%22%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D1%8C%D0%B5+%28%2A%7D+%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%22%2F
은 큰 따옴표로 묶지 않습니다.
그러나; 자바 스크립트 value
가변 위 PHP 부호화 값을 가지면, decodeURIComponent(value)
는 /"печенье+(*}+значения"/
은 .. 대신 자리의 "+"문자 표시 제공
자바, 루비, 펄 및 .NET의 상황이란
? 원하는 언어를 따르는 (또는 가장 가까운) 언어입니다. 사실, W3에 정의 된 표준이 있습니까?
보이지 않는 잉크에 +1! 하나의 동일한 도메인에있는 서버간에 구조화 된 데이터를 공유하는 데 쿠키를 사용할 수는 있지만 매우 유용합니다. – flup
예, 좋은 예입니다. 나는 ** bold ** 부분의 질문에 대답한다면,이 현상금을주고 싶다. 어쨌든, 쿠키는 그들이 읽는 데이터 유형에 상관없이 크로스 플랫폼으로 읽을 수 있어야합니다. 슬프고 엉덩이에 통증이 있습니다. – kirpit
나는 마침내 당신의 질문을 이해하고 이에 따라 나의 대답을 편집했다고 생각합니다. – Hazzit