asp.net-mvc - 本地主机 cookies 未设置

标签 asp.net-mvc cookies localhost

我正在尝试在我的应用程序中设置 cookie。

这是设置 cookie 的代码:

public HttpResponseMessage LogIn(UserLoginVM user)
{
    // Do login stuff

    var cookie = new CookieHeaderValue("STUPID-COOKIE", "12345");
    cookie.Domain = Request.RequestUri.Host;
    cookie.Path = "/";
    cookie.HttpOnly = true;

    // Get user's profile

    HttpResponseMessage res = Request.CreateResponse<UserProfileVM>(HttpStatusCode.OK, profile);
    res.Headers.AddCookies(new CookieHeaderValue[] { cookie });

    return res;
}

服务器的响应如下:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
Set-Cookie: STUPID-COOKIE=12345; domain=localhost; path=/; httponly
Access-Control-Allow-Origin: *
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcUFJPSkVDVFNcU2Ftc2tpcC5TZXJ2aWNlV2ViTmV3XFNhbXNraXAuQXV0aEFQSVxTYW1za2lwLkF1dGhBUElcbG9naW4=?=
X-Powered-By: ASP.NET
Date: Wed, 18 Feb 2015 11:58:07 GMT
Content-Length: 8019

请注意以下 header :

Set-Cookie: STUPID-COOKIE=12345; domain=localhost; path=/; httponly

但是,当我在 Chrome 的“资源”选项卡中进入“Cookie”时,没有设置任何内容。另外,当我向服务器发送请求时, header 中没有 cookie。

下面是读取 cookie 的代码:

CookieHeaderValue cookie = Request.Headers.GetCookies("STUPID-COOKIE").FirstOrDefault();

cookie 变量始终为空。

我的应用程序正在 http://localhost:53998 上运行并且身份验证服务正在 http://localhost:60858 上运行

我的 Chrome 版本是 40.0.2214.111。

这是演示该问题的 GIF: /image/86Xug.gif

编辑:这似乎不是 Chrome 特有的。这在 FireFox (v35) 上也不起作用。 GIF:/image/yFuzd.gif

最佳答案

我今天遇到了这个问题,Gaui 的回答对我来说非常有用,请记住,理想情况下您不想向来自任何站点的 CORS 请求开放您的服务器。我在我的开发环境中,我的服务器和客户端位于不同的来源,因为它们位于本地主机上的不同端口。我也使用 .net core 3.0

我的问题是由于我的服务器没有向我的客户端发送 cookie,因为我的 CORS 设置阻止向我的域发送 cookie,这通过服务器不使用 header Access-Control-Allow-Credentials 可以明显看出:正确。为了解决这个问题,我在 Startup.cs 中配置了我的服务器,以允许来自客户端的请求来允许凭据(凭据是 a cookie's authorization headers or TLS client certificates )。

        var allowedOrigins = new[] {"localhost:3000"}; // Ideally comes from appsettings

        app.UseCors(builder =>
            builder.WithOrigins(allowedOrigins).AllowCredentials().AllowAnyMethod().AllowAnyHeader().Build());

对于 cookie 选项;我发现如果您不想,则不必设置 Domain,即使网站不使用 https,Secure 也可以工作。

Google chrome 现在支持本地主机上的 cookie,我相信它以前并不支持,因为很多旧的 SO 帖子都有遇到该问题的用户。

在客户端,您还需要将其配置为接受 cookie,如上面 Gaui 的回答所示。我正在使用 fetch ,因此必须添加选项:

credentials: 'include'

这告诉 fetch 跨域检索 cookie。请参阅docs here

关于asp.net-mvc - 本地主机 cookies 未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28583729/

相关文章:

apache - 本地主机上的多个虚拟主机用于开发

javascript - 如何使用js获取session的值

javascript - 如何通过 jQuery 和自定义 url 参数使用 cookie

asp.net-mvc - Asp.net - MVC1 与 MVC2

asp.net - Microsoft Graph API .NET - 能够拉取所有用户(包括我自己),但不仅仅是我

javascript - fswrite 具有完整的 777 服务器协议(protocol)。安全的?

apache - 错误 : AH00543: httpd: bad user name - Xampp/Apache

javascript - Charles Proxy 导致隐私错误

c# - 无法从正在运行的Task中执行方法

asp.net-mvc - 在 Asp.Net MVC 中使用 Bootstrap 模式删除确认