【发布时间】:2022-07-20 14:57:49
【问题描述】:
我正在使用 Unity 将包含用户名和密码的登录表单数据发布到端点。我收到包含预期凭据(作为会话 cookie)的成功响应,并且在 Unity 编辑器中测试时成功完成后续通信。
当我将项目部署和构建为 WebGL 时,我没有从我的登录请求中收到“Set-Cookie”标头。这会导致所有后续通信都失败未经授权的 401。
- WebGL 日志中的日志返回成功响应。
- 在浏览器中检查时,我看到成功响应返回了预期的会话 cookie 凭据,标题为“Set-Cookie”。
- 但 UnityWebRequest 在查询“Set-Cookie”响应标头时返回 null。一些标题仍然存在,但大多数似乎已被剥离。
- WebGL 构建从启用 https 的服务器部署和播放 - 这是与登录服务器不同的服务器
我认为在响应返回到我的程序之前有一些安全性(CORS?)剥离这些凭据。允许凭据和 Origin 响应标头显示正确。 'Set-Cookie' 响应头格式为:
Set-Cookie: SESSION=tvohm-example-session; Path=/tvohm-example-path/; Secure; HttpOnly; SameSite=Lax
缩小:
IEnumerator LogInCoroutine()
{
using var request = new UnityWebRequest("https://tvohm-example-url.com/login")
{
method = UnityWebRequest.kHttpVerbPOST,
uploadHandler = new UploadHandlerRaw(UnityWebRequest.SerializeSimpleForm(new Dictionary<string, string>()
{
{ "username", "tvohm" },
{ "password", "ilovestackoverflow" }
}))
};
request.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log(request.GetResponseHeader("Set-Cookie"));
// Editor returns expected session cookie
// WebGl returns null
}
}
调用:
StartCoroutine(LogInCoroutine());
【问题讨论】:
标签: c# unity3d cookies http-headers webgl