繁体   English   中英

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

[英]Request.Cookie does not work after deploy on IIS

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

它使用MVC 4和Entity Framework v4和jQuery。

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个小时,则会立即创建并删除库克。

检查服务器时间,如果是这种情况,请更改到期时间,例如

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM