Heim >Web-Frontend >HTML-Tutorial >Die Safari-Cookie-Einstellung ist auf Chinesisch fehlgeschlagen
Da es sich um ein Windows-Betriebssystem handelt, wurde der Test direkt im Chrome-Browser und anschließend auf dem Android-Gerät durchgeführt, um die Entwicklung und das Debuggen zu erleichtern. Als die Funktion im Wesentlichen abgeschlossen war, wurde sie ursprünglich auf dem Android-Gerät getestet. Bei der Ausführung unter iOS traten jedoch viele seltsame Probleme auf. Bei der Untersuchung wurde festgestellt, dass die relevanten Informationen nicht abgerufen werden konnten weil das Cookie keinen Wert hatte.
Zuerst dachte ich, dass es ein Problem mit verstümmelten chinesischen Zeichen im Cookie sei. Später habe ich festgestellt, dass der Wert des Cookies überhaupt nicht erfolgreich zugewiesen wurde. Ich habe die Informationen online überprüft und festgestellt, dass dies bei Safari nicht der Fall ist Nicht-ASCII-codierte Werte zulassen. Mit anderen Worten: Chinesische Speicherung ist nicht zulässig.
Um dieses Problem zu lösen, muss der Cookie-Wert zuerst codiert und dann decodiert werden, wenn der Wert erhalten wird.
Das Back-End verwendet asp.net, um Cookies zu setzen, und das Front-End verwendet Javascript, um Cookies abzurufen. Können ihre Codierung und Decodierung konsistent sein? Momentan kann ich es nur ausprobieren:
Ich habe mehrere Methoden ausprobiert und festgestellt, dass die Codierung mit HttpUtility.UrlEncode():
erfolgreich war<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);
Clientseitiges Javascript wird wie folgt dekodiert:
<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);
Das heißt: decodeURIComponent() in Javascript und C#s HttpUtility.UrlEncode() sind gepaart.