【问题标题】:How do I read a Connect Js cookie in browser?如何在浏览器中读取 Connect Js cookie?
【发布时间】:2012-08-23 02:42:36
【问题描述】:

我正在使用 Sencha Connect cookie 会话。它在 Node 中运行良好,但我需要在客户端解析 cookie。 Connect 将 s:j: 添加到 cookie 的前面,并在末尾使用点符号 + 生成的密钥。有没有办法防止这种情况或在 JS 中解析它,还是我需要编写自己的解析器?
cookie 值如下所示:

s: j: {
    "oauth": {
        "token": "xxxxxx",
        "token_secret": "xxxxxx",
        "results": {
            "oauth_callback_confirmed": "true"
        },
        "access_token": "xxxxx-xxxx",
        "access_token_secret": "xxxx"
    },
    "me": {
        "val": "bu-rcizj7u8jm7jzgea",
        "refs": {
            "bu-rcizj7u8jm7jzgea": {
                "id": "bu-rcizj7u8jm7jzgea",
                "creation_time": "2012-07-13T16:01:17.159+0000",
                "twitter_id": "138031018",
                "first_name": "xxx",
                "last_name": "xxx",
                "email": "xxx@xxx.com",
                "permission": {
                    "can_update": false,
                    "can_delete": false,
                    "can_read": false
                },
                "twitter_screen_name": "xxxx"
            }
        }
    }
}.DdFx96zckmMbWY8wLiFhuGwnofluk3x2WSVBv71LOV8

【问题讨论】:

  • 这既不是cookie语法也不是JSON语法,所以自定义格式需要自定义解决方案。
  • 这个问题很好。没有任何地方可以解释为什么 cookie 的格式如此丑陋,这使得解析它变得如此困难……s:j: 部分简直要了我的命

标签: javascript node.js cookies extjs


【解决方案1】:

你为什么不做这样的事情呢?它应该适用于任何返回的结构(注意 indexOf 如果未找到则返回 -1,并且 '}.' 通常不是有效的 JSON,因此在实际有效的 JSON 的情况下它只会读到最后)。另一种方法是编写 Dijkstra 算法的实现,该算法仅在找到开头的“{”后才开始推入值堆栈;这会稍微快一些,因为它只会是一次通过(而调用 indexOf 两次可以使我的实现在最坏的情况下通过三次)。如果您有兴趣,我很乐意发送一次性密码。

var rawCookie = 's: j: { "oauth": { "token": "xxxxxx", "token_secret": "xxxxxx", "results": { "oauth_callback_confirmed": "true" },"access_token": "xxxxx-xxxx", "access_token_secret": "xxxx"}, "me": {"val": "bu-rcizj7u8jm7jzgea","refs": {"bu-rcizj7u8jm7jzgea": { "id": "bu-rcizj7u8jm7jzgea", "creation_time": "2012-07-13T16:01:17.159+0000", "twitter_id": "138031018", "first_name": "xxx", "last_name": "xxx", "email": "xxx@xxx.com", "permission": { "can_update": false, "can_delete": false,"can_read": false }, "twitter_screen_name": "xxxx" } } } }.DdFx96zckmMbWY8wLiFhuGwnofluk3x2WSVBv71LOV8';
var niceJsonCookie = rawCookie.slice(rawCookie.indexOf('{'), rawCookie.indexOf('}.') + 1);
var niceJsonObject = JSON.parse(niceJsonCookie);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2017-10-21
    • 2018-06-24
    • 2012-04-04
    相关资源
    最近更新 更多