Request.Cookie 在 IIS 上部署后不起作用

Request.Cookie does not work after deploy on IIS

下面的代码在开发环境中运行,但是当部署在 Windows Server 2012 R2 上时,DsCookie cookie 无法获取从 cookie 创建中创建的值。

它使用带有 Entity Framework v4 和 jQuery 的 MVC 4。

HttpCookie ds_id = new HttpCookie("ds");
ds_id.Value = reqCookie.ToString();
ds_id.Expires = DateTime.Now.AddHours(1);
Response.SetCookie(ds_id);
                Response.Flush();

private HttpCookie DsCookie
{
    get
    {
        return Request.Cookies["ds"];
    }
}

有谁知道为什么我的解决方案只能在开发环境中运行而不能运行?

服务器时间可能与您的本地时间不同。

代码

 DateTime.Now.AddHours(1); 

占用服务器时间。 如果服务器时间比你本地电脑时间早1小时,cooke会被立即创建和删除。

检查服务器时间,如果是这种情况,像

一样更改过期时间
ds_id.Expires = DateTime.Now.AddHours(10); //Or more. 

或者你可以精确的时间差和:

  ds_id.Expires = DateTime.Now.AddHours(1 + time difference between the server and your local time); 

您提供的信息不多,所以这是我根据我能想到的猜测。

检查您的 IIS 设置

在您的 IIS 设置下,前往您的网站部署,然后在功能面板下,导航至 IIS > 身份验证 > 检查您是否使用了正确的身份验证方法。您还可以验证您是否允许所有用户通过 cookie 身份验证进行身份验证

Web.config 必须允许 IIS 向您发送 cookie

如果您的 web.config 文件设置不正确,可能会阻止您的部署发送 cookie。通读并检查它是否允许 IIS 将它们发送出去。

尝试像这样添加一天

如果您没有收到 cookie,可能是 cookie 被立即删除了?这种情况很少见,但它确实发生了。尝试这样做:

ds_id.Expires = DateTime.Now.AddDays(1d);

这应该使 cookie 持久存在

检查服务器的日期时间是否正确

如果不是,这很可能是问题的根源。这听起来很傻,但过去对某些人来说这是一个合理的问题。

确保您的浏览器接受 cookie

如果您的浏览器中有任何拒绝 cookie 的选项,这将阻止您接受登录,因此几乎就像您无法登录一样。

如果在这些修复后您仍然遇到问题,请告诉我们并提供更多详细信息,我们可能会帮助您缩小问题范围。


作为补充说明,这是一种更好(也更干净)的方法:

var dsCookie = new HttpCookie("dsCookie")
{
    Value = reqCookie.ToString(),
    Expires = DateTime.Now.AddHours(1)
};

Response.Cookies.Add(dsCookie);