NodeJS 将connect.sid存储在localStorage而不是cookie中

a8jjtwal  于 2023-06-05  发布在  Node.js
关注(0)|答案(4)|浏览(450)

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

如何从cookie中获取connect.sid?
如何将其存储在localStorage中?
如何在应用程序启动时将connect.sid添加回cookie?

hwamh0ep

hwamh0ep1#

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

nx7onnlm

nx7onnlm2#

假设你已经在变量session_id中有了你的会话ID。您只需使用setItem和getItem方法与本地存储进行交互。
设置变量(注意:变量必须是字符串,因为localstorage只能处理此类型。如果你想存储一个对象或数组,你需要用JSON.stringify()将它转换成json)

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

从本地存储获取会话ID

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

pb3skfrl3#

将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 
    })
}));
eoigrqb6

eoigrqb64#

您可以使用以下步骤:

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

相关问题