以下代码在开发环境中运行,但在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"];
}
}
有谁知道为什么我的解决方案只能在开发环境中工作而不能直播?
答案 0 :(得分:1)
服务器时间和当地时间可能存在差异。
代码
DateTime.Now.AddHours(1);
占用服务器时间。 如果服务器时间比本地pc时间早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);
答案 1 :(得分:0)
您还没有提供各种各样的信息,所以我的猜测基于我的想法。
检查您的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);