把登录信息使用cookie存储到客户端是稀松平常的操作,然而我在Safari浏览器上发现了问题。当登录成功后再刷新页面时,控制台报错:JSON Parse error: Unterminated string。查看原因,竟是因为cookie只存储了一半的信息,导致JSON解析发生错误。

开始以为是cookie内容存储过多,超出了最大存储量导致,但很快就推翻了这种想法。

检查代码发现,存储在cookie中的信息距离4K还差很多,而且在除Safari以外的浏览器中都没有问题。查阅资料,终于找到的问题的根本原因,原来Safari不允许非ASCII码作为cookie的值存储, 原文点击这里 。为此,我做了以下验证。第一次的登录信息姓名为汉字,于是到name后面出现汉字的地方都没有存储;第二次登录的信息姓名为字母,cookie中完整的储存了所有用户信息。

找到了问题产生的原因,就开始找解决问题的办法。办法一,存储cookie时,使用 encodeURI编码,读取cookie时,使用decodeURI解码。cookie可以正常存储和读取了,但是非ASCII码的汉字却以乱码的形式显示在页面中了。办法二,存储时,把JSON字符串转换为base64格式,读取时再转换回来。这个方法我没试,因为js没有原生的转换base64的方法,需要自己写转换函数或引入base64.js,且转换后有超出cookie存储大小的风险。方法三,将用户信息存储到Local Storage里,代替cookie。

最终我是使用的方法三,因为代码最简单,且没有其他bug产生。最多可以存储5M,也不用担心超限的问题了。如果遇到必须使用cookie且存在汉字的情况,可以在前两个方法的基础上进行优化。毕竟,cookie相对于LocalStorage也是有自己的优势的。如果有更好的方法,欢迎指教。

把登录信息使用cookie存储到客户端是稀松平常的操作,然而我在Safari浏览器上发现了问题。当登录成功后再刷新页面时,控制台报错:JSON Parse error: Unterminated string。查看原因,竟是因为cookie只存储了一半的信息,导致JSON解析发生错误。 开始以为是cookie内容存储过多,超出了最大存储量导致,但很快就推翻了这种想... 为实现定义的服务器错误保留。 特定错误是基本构造函数 Json Rpc Error 的实例,而后者又是本机JavaScript Error 对象的实例。 可以使用或不使用new关键字来构造每个错误,例如 var err = new Json Rpc Error . Parse Error (); > const a = '{"__proto__":{ "b":5}}' ; '{"__proto__":{ "b":5}}' > const b = JSON . parse ( a ) ; { __proto__ : { b : 5 } } > b . b ; undefined > const c = Object . assign ( { } , b ) ; > c . b 问题 在于 JSON . parse ()将__proto__属性保留为普通对象键。 就其本身而言,这不是安全 问题 。 然而,一旦该对象被分配给另一个或迭代并复制值, __proto__属性就会泄漏并成为该对象的原型。 npm install secure- json - parse 将选项对象作为第二个(或第三 yarn add deep- parse - json const { deep Parse Json } = require('deep- parse - json ') const string ified = '{"personList":"[{\\"name\\":\\"siba\\"},{\\"name\\":\\"bhaskar\\"}]"}' console.log(deep Parse Json ( string ified)) // { personList: [ { name: 'siba' }, { name: 'bhaskar' } ] } 问题 分析 根本原因是 json .dump(data, open('file_path', 'w')) 数据 可能 没有完全写入到文件,导致 json .load的时候读取的时不完整的 json 数据。 使用 with open() as f: 重写代码,正确关闭文件句柄,从而数据
conda install 问题 (py36_for_pytorch020) abc@robot:~/Desktop/CSPN-master/cspn_pytorch$ conda install samtoolsSolving environment: failed # >>>>>>>>>>>>>>>&...
Unexpected string in JSON at position 606902 while parsing '{ npm ERR! "name": "emsteacher", npm ERR! "version":
在使用org. json 获取 json 格式数据 org. json . JSON Exception: Un terminate d string at 1959 [character 0 line 98]该异常在next String 方法中抛出: public String next String (char quote) throws JSON Exception { char c; String Builder sb = new String Builder(); for (;;
Syntax Error : JSON . parse : unexpected non-whitespace character after JSON data at line 1 column 237 of the JSON data Uncaught Syntax Error : Unexpected string in JSON at position 236 错误原因:循环之前没有初始化或者初始化不完...
我这边的话。这个错误是因为 json 字符串包含了特殊的字符。用这个在来转换对象的时候,就会出现这种错误。我那边有出现两个一个是: 一个是/所以要把这些替换掉就可以了   //去掉特殊的字符 : /这些 String s=base.getData();   s=s.replaceAll(":", ":").replace("/", "");   RefundValue response =
小程序路由传参,参数转换报错:Syntax Error : Unexpected end of JSON input 原因:小程序路由传参对参数长度有限制,当传递的参数超出限制时,会被截取。 //item为要传递的对象 wx.navigateTo({ url: '/XX?item=' + JSON . string ify(item) onLoad(options){ //options是接收的item参数 ,此时的item参数由于长度超出限度,已经被截取 console.log
JSON 是一种常见的数据格式,如果我们要在前后端之间传递数据,就需要用到 JSON JSON 字符串是由一系列无序的键值对组成。当 JSON 字符串出现 问题 时,就会出现“Unable to parse JSON string ”错误。 出现这种错误的原因 可能 有很多种,如 JSON 格式不正确、缺少引号、不一致的数据类型等。解决这种 问题 的方法是在代码中使用 JSON . parse ()方法来转换数据。 当 JSON 格式不正确时,我们需要检查 JSON 字符串是否遵循正确的 JSON 格式。 JSON 格式要求每个属性必须用双引号括起来,每个键值对之间用逗号分隔,对象要用花括号括起来,数组要用方括号括起来。如果格式不对,就要手动修改或者使用 JSON Schema校验工具进行验证。 JSON . parse ()方法用于把字符串转换为JavaScript对象。如果 JSON 字符串中存在 问题 ,那么该方法就会抛出错误。我们可以在代码中使用try...catch语句来捕获 JSON . parse ()方法的错误,处理异常情况。 总之,当我们使用 JSON 交换数据出现 问题 时,我们需要了解 JSON 的格式要求,并对 JSON 字符串进行校验和修复。此外,学会使用 JSON . parse ()方法来解析 JSON 字符串,以便更好地处理 JSON 数据。
Cannot checkout from svn:svn:E170013:Unable to connect to a repository at URL '' svn:E230001:Server. Mac的终端,相当于Windows的命令行工具 Cannot checkout from svn:svn:E170013:Unable to connect to a repository at URL '' svn:E230001:Server. yy012800: 这个终端 是哪里的终端 需要在哪里输