无法读取“ httpOnly:false” Cookie

时间:2018-11-21 22:26:46

标签: reactjs express cookies

我有一个已编写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;
}

1 个答案:

答案 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。