NWJS重启后已登录会话无法持久化保存问题咨询
排查方向和解决方案
- 首先校验指定用户数据目录的读写权限
你配置中chromium-args显式指定了--user-data-dir='/Users/sunil/sunil/temp/userdatadir/profile1',首先确认该路径是否存在、当前运行应用的用户是否对该目录有读写权限。如果近期系统升级、目录权限被修改、或者磁盘空间不足,都会导致Chromium无法将Cookie、LocalStorage等会话数据写入磁盘,重启后自然丢失会话。可以先删除整个profile1目录,重启应用让NW自动重建目录后再次测试。 - 检查窗口配置的持久化属性
如果你的应用有通过nw.Window.open动态创建新窗口的逻辑,需要确认创建窗口时webPreferences中的partition属性是否带有persist:前缀,只有格式为persist:xxx的partition才会将会话数据持久化到磁盘,不带前缀的partition为临时内存存储,关闭窗口就会清空数据。如果是默认启动的主窗口,可在package.json的window配置下增加webPreferences显式声明持久化:"window": { // 原有配置不变 "webPreferences": { "partition": "persist:default" } } - 检查应用退出逻辑是否存在异常清空操作
排查近期新增的代码是否在应用退出阶段调用了nw.App.clearCache()、nw.Cookies.removeAll()、清空LocalStorage/IndexedDB之类的清理逻辑;另外如果你监听了窗口的close事件,不要在回调中直接调用process.exit()强制杀进程,要给Chromium留足够的时间将内存中的会话数据刷入磁盘,正确的处理是先调用win.close(true)等资源释放完成后再退出。 - 新增Chromium参数强制持久化会话
你可以在chromium-args中增加--persist-session-cookies参数,强制Chromium将会话Cookie(无过期时间的Cookie)也持久化到磁盘,避免默认策略不保存会话Cookie的问题:"chromium-args": "--enable-logging=stderr --disable-gpu --user-data-dir='/Users/sunil/sunil/temp/userdatadir/profile1' --persist-session-cookies"
你提到调用win.reloadIgnoringCache()时会话正常,说明运行时的会话数据是完整的,问题完全出在持久化写入环节,按照上面的方向逐一排查即可定位问题。目前NWJS没有额外新增特殊的会话变量参数,核心还是依赖Chromium的持久化逻辑和目录权限配置。
内容的提问来源于stack exchange,提问作者Sunil Kumar
相关产品推荐
相关产品推荐

