javascript - Office JS ui.displayDialogAsync 在关闭时丢失 session cookie

标签 javascript session-cookies office-js

我正在尝试使用 Office JS API 构建一个 Word 插件,该插件与外部 Web 服务(在我的控制下)进行通信。

我正在使用 ui.displayDialogAsync 打开一个对话框,它会立即重定向到外部服务器的登录页面(重定向是为了绕过相同的域限制)。

当用户正确输入登录详细信息时,服务器会发回 session cookie。

不幸的是,在旧版本的 Word 2016 中,当在 Word 中关闭对话框时,所有 session Cookie 都会被忘记,并且从加载项发送到 Web 服务的任何进一步请求都会被拒绝,因为没有发送 Cookie。

该问题在 Word 2016 的批量许可版本中出现,但在 Office 365 版本的 Word 2016 中却没有出现,后者似乎具有更高的版本/内部版本号。

如果我使用 Fiddler 查看请求/响应,我可以看到对话框内部发出的请求与对话框关闭后发出的请求来自不同的进程 ID。

出于安全原因(一旦用户关闭浏览器, session 需要终止),我无法使用持久 cookie,而且持久 cookie 似乎与 IE 共享,我们需要在 IE 和 IE 中拥有独立的 session 同时Word(一些重要的状态存储在cookie中)。

还有其他人遇到过这个问题/知道如何解决它吗。

最佳答案

对话框在单独的进程中运行,这是正确的。

查看信息:https://learn.microsoft.com/en-us/office/dev/add-ins/develop/dialog-api-in-office-add-ins

请注意: “将信息存储在主机窗口和对话框均可访问的位置。这两个窗口不共享公共(public) session 存储,但如果它们具有相同的域(包括端口号,如果有),则它们共享公共(public)本地存储”

因此,选项一:如果满足要求,则使用本地存储。

选项二:您可以使用名为 Office.context.ui.messageParent() 的函数向您的主机 (TaskPane) 发送消息,其中包含需要存储的 sessionId 以及从 TaskPane 存储的 session ID

关于javascript - Office JS ui.displayDialogAsync 在关闭时丢失 session cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45694169/

相关文章:

Javascript从另一个数组的索引中获取一个数组

javascript - 无法从带有 Socket.IO 的 cookie 中获取 Express session ID

javascript - 如何使用 Javascript API 在 Excel 中创建数据透视表

javascript - Word 加载项获取完整的文档文本?

javascript - 如何在输入html时突出显示文本?

javascript - Jquery UI slider ,设置值错误

javascript - 来自不支持 JSON-P 输出的外部域的 jQuery "getJSON"

安卓 : Share session between Webview and httpclient

cookies - 欧盟 cookie 法 - 第三方 session cookie

office-js - Word Office.js 中 InsertHtml 的字体错误