如果应用程序或选项卡在登录后立即关闭,一些 iPhone/iPad 设备将丢失其登录 cookie。
我在研究中发现并解决的问题没有运气:
Safari 可能默认禁用 Cookie(Cookie 在 MAC -Safari 和 IOS 移动版 - Safari 中不起作用)
有人提到 cookie 值中的逗号和分号在 Safari 上不起作用(Cookie 在 MAC -Safari 和 IOS Mobile- Safari 中不起作用)(Safari 和 Asp.net 中 cookie 的奇怪问题)
String hash = FormsAuthentication.Encrypt(ticket);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
user.MemberNumber.ToString(),
DateTime.UtcNow,
DateTime.UtcNow.AddDays(numOfDays),
true,
string.Empty);
//FormsAuthentication.FormsCookiePath);
AppPool 可能会重置加密密钥(通过 ASP .Net 会员资格使用户登录持久化)
Safari 可能设置为隐私模式进行浏览(iOS Safari 上的浏览器会话之间不保存 Cookie)
web.config 可能需要显式设置 cookieless,以便在表单身份验证中使用 cookie (http://www.bloggersworld.com/index.php/asp-net-forms-authentication-iphone-cookies/)
Safari 在重定向到“我的帐户”时设置 cookie 时遇到问题(Safari 不保存 Cookie,但 Chrome 会)
if (HttpContext.Current.Request.Browser.Type.ToLower().Contains("safari"))
{
HttpContext.Current.Response.AddHeader("Set-Cookie", CookieName + "=" + cookie + "; path=/; domain=" + HttpContext.Current.Request.Url.Host + ";");
}
使用 MacBook 上的 Web Inspector 确保 Cookie 已投放到 iPhone 上
iOS11 在接受 cookie 方面似乎更加严格。 (iOS Safari/Chrome 中的 Cookie 持久性)
其他不适用的问题
来源:Safari 第 3 方 cookie iframe 技巧不再起作用?
我不确定为什么 cookie 不会被保存,直到有人在网站上移动,但它很容易通过这种方式复制:
根据您的标头响应代码...
HttpContext.Current.Response.AddHeader("Set-Cookie", CookieName + "=" + cookie + "; path=/; domain=" + HttpContext.Current.Request.Url.Host + ";");
...您似乎没有设置到期日期。没有过期日期的 Cookie 称为“会话 Cookie”,并会在浏览器会话之间被删除(例如,在 iOS 上关闭并重新打开 safari)。
您想要的是一个“持久”cookie,它只是一个将
Expires
属性设置为未来某个时间的 cookie。您还可以使用 Max-Age
属性来达到相同的效果。
请参阅 Mozilla 文档 了解更多信息。
我在 iphone 上的 Safari 中也遇到同样的问题,并且我的 cookie 的有效期为 1 个月。