我有一个已编写Cookie的快递服务器,但无法从客户端访问它。我可以在Chrome开发者工具中看到它,它没有标记为httpOnly或Secure,但是当我尝试通过我的React应用程序甚至只是在浏览器控制台中输入document.cookie来访问它时,我什么也没得到。>
现在,快递服务器正在Heroku上运行,而我的客户端是localhost。
我很困惑。
这是我的服务器端代码,用于设置cookie:
void* __cdecl go_call(void* func, __int64 p1, __int64 p2, __int64 p3, __int64 p4){
void* ret;
asm volatile(" sub rsp, 0x28; \t\n\
mov [rsp], %[p1]; \t\n\
mov [rsp+0x8], %[p2]; \t\n\
mov [rsp+0x10], %[p3]; \t\n\
mov [rsp+0x18], %[p4]; \t\n\
call %[func_addr]; \t\n\
add rsp, 0x28; "
:
: [p1] "ri"(p1), [p2] "ri"(p2),
[p3] "ri"(p3), [p4] "ri"(p4), [func_addr] "ri"(func)
: );
return ret;
}
答案 0 :(得分:0)
Express服务器在heroku中运行,而客户端服务器在localhost中运行。
如果未设置Cookie的Domain
,则Express服务器中设置的Cookie的作用域为当前主机。 [1]
说您的应用程序在express.herokuapp.com
处提供,
脚本只能在同一主机上运行时才能读取。 即 express.herokuapp.com
但是,对于Cookie范围,在域中设置的Cookie可以由在子域中运行的脚本读取。
在开发中,您可以将Cookie的Domain
属性设置为.herokuapp.com
对于生产,我强烈建议将cookie明确地限定在客户域内。如果客户端和服务器在不同的子域中运行,则可以与开发应用相同的过程。仅当在其他子域中运行的其他客户端应用共享cookie时,才应该这样做。
但是,如果客户端和服务器都将在同一域中运行,我建议保留默认的cookie范围。
如果客户端和服务器在不同的域中运行,我强烈建议将cookie明确限定在客户端域中。
然后将/etc/hosts
中的以下条目添加到将localhost
别名到herokuapp.com
的子域
127.0.0.1 local.herokuapp.com
访问地址别名,客户端脚本将读取cookie。