【发布时间】:2013-02-08 04:18:09
【问题描述】:
我正在开发一个基于客户端的 AngularJS 和服务器端的 API(Tomcat + Jersey for WS)的应用程序。
我的 API 的某些路径受到限制,如果用户没有会话,则返回的响应状态为 401。在客户端,拦截 401 http 状态以将用户重定向到登录页面。
用户通过身份验证后,我会在服务器端创建会话
httpRequest.getSession(true);并且发送给客户端的响应在其标头中确实包含 Set-cookie 指令: 设置 Cookie:JSESSIONID=XXXXXXXXXXXXXXXXXXXXX;域=本地主机;路径=/api/; HttpOnly
问题是cookie永远不会放在客户端。当我检查 localhost 域的 cookie 时,它是空的,因此下一个请求的标头中没有此 cookie,客户端仍然无法访问我的 API 的受限路径。
客户端和服务器在同一个域中,但它们没有相同的路径和相同的端口号:
客户:http://localhost:8000/app/index.html
服务器:http://localhost:8080/api/restricted/
附加信息:双方都启用了 CORS:
"Access-Control-Allow-Methods", "GET, POST, OPTIONS" “访问控制允许来源”,“*” "Access-Control-Allow-Credentials", true
让 Set-cookie 正常工作的任何想法? 它是 AngularJS 相关的问题吗?
【问题讨论】:
-
我不确定它是否仍然相关,但让您的 API 依赖于状态是一个糟糕的设计选择 (tm)。您应该使您的 API 无状态以避免将来出现问题。
标签: javascript angularjs cookies setcookie