当应用程序立即关闭时,Safari 不会在 iPhone 或 iPad (iOS) 上保存 cookie

问题描述 投票:0回答:2

如果应用程序或选项卡在登录后立即关闭,一些 iPhone/iPad 设备将丢失其登录 cookie。

我在研究中发现并解决的问题没有运气:

  1. Safari 可能默认禁用 Cookie(Cookie 在 MAC -Safari 和 IOS 移动版 - Safari 中不起作用)

    • 已选中并启用 cookie
  2. 有人提到 cookie 值中的逗号和分号在 Safari 上不起作用(Cookie 在 MAC -Safari 和 IOS Mobile- Safari 中不起作用)(Safari 和 Asp.net 中 cookie 的奇怪问题

    • 代码执行 FormsAuthentication.Encrypt() 将所有内容转换为大写字符
String hash = FormsAuthentication.Encrypt(ticket);
  • 创建 FormsAuthenticationTicket 时关闭 FormsCookiePath,以防路径在 iOS 和 Android 上包含无效字符
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
  1,
  user.MemberNumber.ToString(),
  DateTime.UtcNow,
  DateTime.UtcNow.AddDays(numOfDays),
  true,
  string.Empty);
  //FormsAuthentication.FormsCookiePath);
  1. AppPool 可能会重置加密密钥(通过 ASP .Net 会员资格使用户登录持久化

    • 已验证 machineKey 正在更新
  2. Safari 可能设置为隐私模式进行浏览(iOS Safari 上的浏览器会话之间不保存 Cookie

    • 已验证 Safari 未处于隐私模式
  3. web.config 可能需要显式设置 cookieless,以便在表单身份验证中使用 cookie (http://www.bloggersworld.com/index.php/asp-net-forms-authentication-iphone-cookies/)

    • 添加了 cookieless=”UseCookies” 到
  4. Safari 在重定向到“我的帐户”时设置 cookie 时遇到问题(Safari 不保存 Cookie,但 Chrome 会

    • 为 safari 用户添加了 Response 对象的标头(起初这似乎适用于 iPad,但现在不再适用)
if (HttpContext.Current.Request.Browser.Type.ToLower().Contains("safari"))
{
    HttpContext.Current.Response.AddHeader("Set-Cookie", CookieName + "=" + cookie + "; path=/; domain=" + HttpContext.Current.Request.Url.Host + ";");
}
  1. 使用 MacBook 上的 Web Inspector 确保 Cookie 已投放到 iPhone 上

    • 当 iPhone 连接到 MacBook 时,一切都运行良好,但当断开连接时,一切都会崩溃。
    • 事实上,在连接时删除 cookie 时,MacBook 上 Safari 中的 Web 检查器显示 cookie 已被删除,但当我断开连接并尝试在断开连接的 iPhone 上访问该网站时,它仍然显示已登录。然后我重新连接iPhone 到 MacBook,原来的 cookie 仍然存在。
  2. iOS11 在接受 cookie 方面似乎更加严格。 (iOS Safari/Chrome 中的 Cookie 持久性

    • 将域添加到 cookie 创建中

其他不适用的问题

  • 使用 IFRAME 时 Safari 不会获取 cookie
  • Safari 不读取第 3 方 cookie

来源:Safari 第 3 方 cookie iframe 技巧不再起作用?

我不确定为什么 cookie 不会被保存,直到有人在网站上移动,但它很容易通过这种方式复制:

  1. 前往网站
  2. 登录(登录将用户重定向到“我的帐户”页面)
  3. 关闭应用程序
  4. 返回应用程序(该选项卡已位于“我的帐户”页面,该页面将用户重定向到登录页面,因为浏览器找不到 cookie 并认为用户未登录。
ios iphone safari mobile-safari
2个回答
0
投票

根据您的标头响应代码...

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 文档 了解更多信息。


0
投票

我在 iphone 上的 Safari 中也遇到同样的问题,并且我的 cookie 的有效期为 1 个月。

© www.soinside.com 2019 - 2024. All rights reserved.