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

Nic*_*lin 7 iphone safari mobile-safari ios

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

\n\n

我在研究中发现并不幸解决的问题:

\n\n
    \n
  1. Safari 可能默认禁用 cookie(Cookie 在 MAC -Safari 和 IOS Mobile- Safari 中不起作用

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

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

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

    \n\n
      \n
    • 已验证 Safari 未处于隐私模式
    • \n
  4. \n
  5. web.config 可能需要显式设置 cookieless 才能使用带有表单身份验证的 cookie ( http://www.bloggersworld.com/index.php/asp-net-forms-authentication-iphone-cookies/ )

    \n\n
      \n
    • 将 cookieless=\xe2\x80\x9dUseCookies\xe2\x80\x9d 添加到 <authentication><forms>
    • \n
  6. \n
  7. Safari 在重定向到“我的帐户”时设置 cookie 时遇到问题(Safari 不保存 cookie,但 Chrome 会

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

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

    \n\n
      \n
    • 将域添加到 cookie 创建中
    • \n
  4. \n
\n\n

其他不适用的问题

\n\n
    \n
  • 使用 IFRAME 时 Safari 不会获取 cookie
  • \n
  • Safari 无法读取第 3 方 cookie
  • \n
\n\n

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

\n\n

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

\n\n
    \n
  1. 前往网站
  2. \n
  3. 登录(登录将用户重定向到“我的帐户”页面)
  4. \n
  5. 关闭应用程序
  6. \n
  7. 返回应用程序(该选项卡已位于“我的帐户”页面,该页面将用户重定向到登录帐户,因为浏览器找不到 cookie 并认为用户尚未登录。
  8. \n
\n

nin*_*rak 0

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

HttpContext.Current.Response.AddHeader("Set-Cookie", CookieName + "=" + cookie + "; path=/; domain=" + HttpContext.Current.Request.Url.Host + ";");
Run Code Online (Sandbox Code Playgroud)

...看来您没有设置到期日期。没有过期日期的 Cookie 称为“会话 Cookie”,会在浏览器会话之间被删除(例如,在 iOS 上关闭并重新打开 safari)。

您想要的是一个“持久”cookie,它只是一个属性设置Expires为未来某个时间的 cookie。您也可以使用该Max-Age属性来达到相同的效果。

有关更多信息,请参阅Mozilla 文档。


归档时间:

查看次数:

4537 次

最近记录:

3 年,4 月 前