嗨,大家好! 关于如何将sessionID从一个域传输到另一个域并将其写入客户端 cookie 的任何想法?
域号 1 - 一般站点
域号 2 - etherpad
有一个ep_auth_session插件,但它在我的情况下不起作用(_您无权访问此 pad_),因为我使用以下设置:
{
"ip": "127.0.0.1",
"trustProxy": true,
"requireSession": true
}
加上 proxy_pass
我猜在站点 a 上有一些逻辑,当最初进行会话时,它会将 sessionID 发布到 etherpad。 需要 Etherpad 中的插件。
@JohnMcLear来自域名 1,我们无法在域名 2 上设置 cookie
cookie 必须直接设置在域号 2 上
有没有这样的插件或者需要开发?
它需要被开发。 看看我如何在 ep_what_have_i_missed 中设置 cookie
它需要被开发。 看看我如何在 ep_what_have_i_missed 中设置 cookie
我们有类似的东西。 在我们的例子中,我们有一个主页,它是一个包装 Etherpad 编辑器的 iframe。
我不知道这是不是你的情况,如果是这样,这些片段可能会有所帮助。
从包装器通过 PostMessage 发送消息
Window.postMessage(message, '*')
监听来自外部的 API 调用(Etherpad 插件)
var _listenToAPICallsToSetSessionOnCookie = function() {
// listen to outbound calls of this API
window.addEventListener('message', function(e) {
... check the content of 'e'
setSessionOnCookie(e.data.sessionID, e.data.expires)
}
});
}
添加会话 ID(Etherpad 插件)
var setSessionOnCookie = function(sessionID, expires) {
var existingSessionIDs = getSessionID(); // get existent sessions id
var sessionIDAlreadyStored = existingSessionIDs.indexOf(sessionID) !== -1;
if (!sessionIDAlreadyStored) {
// need to append new session id to the end of existing list
var allSessionIDs = existingSessionIDs.length ? existingSessionIDs + ',' : '';
allSessionIDs += sessionID;
// include expiration, if provided
var expiration = expires ? ';expires=' + (new Date(expires).toUTCString()) : '';
document.cookie = 'sessionID=' + allSessionIDs + expiration + ';secure';
}
}
有关 postMessage API 的更多信息
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage