当origin url和request url不同时,为request-url设置cookie

时间:2016-07-28 12:30:25

标签: node.js http cookies request cors

给出了我迄今为止尝试过的一些代码。

  

请求来源 - " abc.com",Request-url - " login.abc.com/login" (后方法)

function setCookie(req, res)
{
    //Some code goes here.
    //Code to set cookie
    res.cookie('test',"some value"); //This should set cookie for login.abc.com, which never happened
}

还尝试设置域名

function setCookie(req, res)
{
    //Some code goes here.
    //Code to set cookie
    res.cookie('test',"some value",{domain:'.abc.com'},{'path' : '/'});//This should set cookie for .abc.com
}

以下代码按预期工作

  

请求来源 - " abc.com",Request-url - " abc.com/login" (后方法)

function setCookie(req, res)
{
    //Some code goes here.
    //Code to set cookie
    res.cookie('test',"some value",{domain:'.abc.com'},{'path' : '/'});//This set the cookie for .abc.com successfully
}

有人可以帮我理解为什么它不是在第一种情况下设置cookie而是在第二种情况下设置cookie吗?

注意我在本地尝试此操作。

1 个答案:

答案 0 :(得分:0)

所以最后我得到了我的问题的解决方案,并能够实现我想要的。写下这个答案,以便其他人可以在将来获得利益。

客户端的变化: -

#include <string>
#include <vector>
using namespace std;

#define MAX_BUFFER 30

int main(int argc, char **argv) {

    vector<string> myVec = { "hey","asd","haha" };
    vector<string> clone;

    for (int i = myVec.size(); i--;) {
        myVec[i].reserve(myVec[i].size() + MAX_BUFFER);
        clone.push_back(myVec[i]);
    }

    return 0;
}

现在服务器端发生了变化: -

$.ajax({type: "post",
        data: {},
        timeout: 30000,
        dataType:"json",
        xhrFields : {withCredentials : true} //Need to add this along with the request.
     })

请参阅cors-doc以了解有关如何在服务器端使用 var cors = require('cors'); app.post('/testRoute', cors({credentials:true, origin:'http://example.com'}), //Origin should be the url of the page, from where we are sending request. function(req, res){ res.cookie('test',"some value",{'path' : '/'}) }) 的更多信息。

注意: - 如果我们在ajax请求中指定cors,则无法将Access-Control-Allow-Origin值用作*