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);
下面的代码在开发环境中运行,但是当部署在 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);