我正在使用 Javascript 和 XmlHttpRequest POST 到同一站点上的另一个 URL。用户必须经过身份验证才能访问 Javascript 运行的页面,但我需要以未经身份验证的用户身份将 POST 提交到第二个 URL(以防止服务器运行始终为经过身份验证的用户运行的代码)。有没有办法提交 POST,使其看起来来自未经身份验证的用户(这样服务器就不会从 session 中提取用户的身份验证信息,并将其视为已通过 POST 身份验证)?
例如,有没有办法只为 POST 打开一个新 session ,或者只为 POST 更改 session ID?
注意:
- 我尝试使用不存在的用户的凭据显式执行授权,但这没有任何区别。
- 如果可以使用 ajax 而不是 XmlHttpRequest 来完成此操作,那么这是一个可接受的解决方案。
最佳答案
不幸的是,这不能仅在 JavaScript 中实现,因此您必须在服务器上进行一些更改。您有两个选择:
您可以将 session cookie 标记为 HttpOnly,这样它就不会与您的请求一起发送。但这意味着您的所有请求都会以未经身份验证的用户身份发送。
第二个选项是为此端点使用子域。 Cookie 仅在同一域上与 XmlHttpRequest 一起发送,以防止跨站点脚本编写。因此,如果您将服务器端点从
www.example.com/myresource
移至至api.example.com/myresource
,cookie将不会被发送。
关于Javascript:如何强制 POST 请求将用户视为未经过身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45925732/