【问题标题】:store connect.sid in localStorage instead of a cookie将 connect.sid 存储在 localStorage 而不是 cookie
【发布时间】:2014-01-25 19:46:52
【问题描述】:

当我登录到我的 PhoneGap 应用程序时,一切正常。我可以在当前会话中发出请求并且我通过了身份验证。如果我完全关闭应用程序并在会话消失的情况下重新启动它,则带有 connect.sid 的 cookie 在应用程序重新启动之间不会持续存在——这是一个我无法解决的 phonegap 问题。

我应该如何从 cookie 中获取 connect.sid?

我应该如何将其存储在 localStorage 中?

如何在应用启动时将 connect.sid 添加回 cookie?

【问题讨论】:

  • 在 IOS 7 中,cookie 未存储(默认)。启动应用程序时必须登录服务器。否则,您必须在 IOS 上启用 Cookies see
  • 请注意,localStorage 值不会发送到服务器。如果您决定使用它,您仍然需要弄清楚如何将它们传递给服务器(或在应用重新启动时对它们进行 cookie,以便它们自动传递给服务器)
  • @HectorCorrea 这正是我想要弄清楚的。使用 localStorage 保留此数据,但仍将其发送到服务器。
  • @boom 你有想过这个问题吗?我正在努力解决同样的问题!

标签: html node.js cordova express connect


【解决方案1】:

您可以使用以下程序:

  • 使用纯 javascriptjquery-cookie 读取 cookie,然后在每次请求时将其保存到持久存储(例如 localstorage)(允许您保持会话新鲜度)
  • deviceready处理程序中,从持久存储中读取会话cookie,然后将其设置在文档上,这与上一个项目符号相反(允许您处理应用程序重启)

【讨论】:

  • 我用指向可以执行每个操作的库的指针编辑了响应。
【解决方案2】:

在本地存储中保存 session_id 不是更好的方法。当您的服务器重新启动时,我将被清除。 您需要将会话数据保存在数据库中。这是 mongodb 的示例。没有额外的编码,只需在会话声明中传递您的数据库连接字符串。

var MongoStore = require('connect-mongo')(express);
app.use(express.session({
    secret : "", 
    store : new MongoStore({ 
        db : "database_name",
        host : "database_host", 
        username : "database_username", 
        password : database_password, 
        auto_reconnect : true 
    })
}));

【讨论】:

  • 这不起作用,这不是问题。会话数据和 id 一直对服务器可用。只是当phonegap应用重新启动到客户端时connect.sid丢失了。
【解决方案3】:

假设您的会话 ID 已经在变量 session_id 中。您只需使用 setItem 和 getItem 方法与本地存储进行交互。

设置变量(注意:变量必须是字符串,因为localstorage只能处理这种类型。如果要存储对象或数组,需要将其转换为jsonJSON.stringify()

window.localStorage.setItem("sessionid", session_id);

从本地存储中获取您的 sessionid

var id= window.localStorage.getItem("sessionid");

【讨论】:

  • 谢谢,但我不是在寻找如何使用 localStorage。我正在寻找如何从 cookie 中提取会话 id,然后在应用程序恢复时如何正确地将其发送到服务器。
  • 为什么投反对票?我回答了这个问题,就像陈述的那样......“我怎样才能在 localStorage 而不是 cookie 中存储/检索 session_id?localStorage 在应用程序重新启动之间持续存在”
  • 你回答了这个问题,我怎样才能在 localStorage 中存储任何东西。
  • @boom:我知道... :-) 有时你会因为正确答案而收到反对票。
  • 对于一个完全不同的问题的正确答案也许是。你可以编辑它来回答我问你是否愿意的问题。
【解决方案4】:

我使用LocalStorage,它仍然存在,但如果手机需要更多存储空间,它可以清除您的应用浏览器缓存,包括 cookie、LocalStorage/tmp 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 2019-03-20
    • 2014-04-11
    • 2016-02-03
    • 2016-04-21
    • 2015-09-01
    • 2023-03-25
    相关资源
    最近更新 更多