为什么 Twitter webview 会清除我的会话 cookie?
Why does Twitter webview clear my session cookies?
我正在 PHP 中创建您的标准登录。它依赖于用户的会话保持不变来保持用户登录。会话一直按预期在桌面浏览器、iOS 上的 Safari 和 Facebook iOS 应用程序中的 webview 上持续存在。但是,它不会在 Twitter iOS 应用程序的 webview 上持续存在。
我有这个 simple page 来打印会话:
<?php
session_start();
?>
<html>
<body>
<h1>$_SESSION</h1>
<?php
print_r($_SESSION);
?>
<h1>$_COOKIE</h1>
<?php
print_R($_COOKIE);
?>
</body>
</html>
iOS
上的 Safari
- 在 iOS 上的 Safari 中打开页面。
- 重新加载页面 10 次。
- 每次都打印相同的会话 ID。
Facebook iOS
- Post link 到您的 Facebook 墙。
- 点击 link 10 次。
- 每次都打印相同的会话 ID。
Twitter iOS
- 在 Twitter 上发推 link。
- 点击 link 10 次。
- 每次都缺少会话 ID。
Twitter 与其他所有人之间的唯一主要区别是 Twitter 使用其缩短服务转换所有 link。如果您检查帖子的网站源代码,您会看到:
<a href="t.co/someCode">yourOriginalLink.com</a>
这会影响您的推荐人。但是 referer 究竟会如何搞砸你的会话?
我知道其他网站已经获得了在 Twitter 上持续存在的会话,因为我已经登录了那些其他应用程序,并且每次启动他们的网站时我都保持登录状态。例如,您可以查看 Meerkat。只需在您的 Twitter iOS 应用程序中搜索 #meerkat,然后单击任何推文中的 link。系统会要求您登录。如果您单击第二个 Meerkat link,它会记住您之前已经登录过。
不幸的是,任何使用 UIWebview 的应用都不太可能保留您的 cookie。这是我们 Branch 每天都面临的问题,因为我们在深度链接时使用 cookie 来了解是否将任何给定用户带到应用程序而不是 App Store / Play Store。
一种解决方法是始终将用户带到 Safari,因为您的 cookie 可以保留在那里。然后你可以重定向到你想带用户去的任何地方。 Safari 中的第一方 cookie 会保留。第三方 cookie 通常不会保留,即使在 Safari 中也是如此。希望这会有所帮助。
Twitter iOS 应用程序会在 web 视图被关闭时销毁其会话。在标准 cookie 管理中,没有任何明确过期的 cookie 在会话结束时被清除。我们希望保留 cookie,以便用户不必一遍又一遍地登录。
$params = session_get_cookie_params();
setcookie(
session_name(),
$_COOKIE[session_name()],
time() + 60 * 60 * 24 * 365,
$params["path"],
$params["domain"],
$params["secure"],
$params["httponly"]
);
Facebook 应用程序不会在 webview 消失时清除 cookie,这可能是因为它有智能缓存逻辑来将 webview 保留在内存中而不是释放它。
我正在 PHP 中创建您的标准登录。它依赖于用户的会话保持不变来保持用户登录。会话一直按预期在桌面浏览器、iOS 上的 Safari 和 Facebook iOS 应用程序中的 webview 上持续存在。但是,它不会在 Twitter iOS 应用程序的 webview 上持续存在。
我有这个 simple page 来打印会话:
<?php
session_start();
?>
<html>
<body>
<h1>$_SESSION</h1>
<?php
print_r($_SESSION);
?>
<h1>$_COOKIE</h1>
<?php
print_R($_COOKIE);
?>
</body>
</html>
iOS
上的 Safari- 在 iOS 上的 Safari 中打开页面。
- 重新加载页面 10 次。
- 每次都打印相同的会话 ID。
Facebook iOS
- Post link 到您的 Facebook 墙。
- 点击 link 10 次。
- 每次都打印相同的会话 ID。
Twitter iOS
- 在 Twitter 上发推 link。
- 点击 link 10 次。
- 每次都缺少会话 ID。
Twitter 与其他所有人之间的唯一主要区别是 Twitter 使用其缩短服务转换所有 link。如果您检查帖子的网站源代码,您会看到:
<a href="t.co/someCode">yourOriginalLink.com</a>
这会影响您的推荐人。但是 referer 究竟会如何搞砸你的会话?
我知道其他网站已经获得了在 Twitter 上持续存在的会话,因为我已经登录了那些其他应用程序,并且每次启动他们的网站时我都保持登录状态。例如,您可以查看 Meerkat。只需在您的 Twitter iOS 应用程序中搜索 #meerkat,然后单击任何推文中的 link。系统会要求您登录。如果您单击第二个 Meerkat link,它会记住您之前已经登录过。
不幸的是,任何使用 UIWebview 的应用都不太可能保留您的 cookie。这是我们 Branch 每天都面临的问题,因为我们在深度链接时使用 cookie 来了解是否将任何给定用户带到应用程序而不是 App Store / Play Store。
一种解决方法是始终将用户带到 Safari,因为您的 cookie 可以保留在那里。然后你可以重定向到你想带用户去的任何地方。 Safari 中的第一方 cookie 会保留。第三方 cookie 通常不会保留,即使在 Safari 中也是如此。希望这会有所帮助。
Twitter iOS 应用程序会在 web 视图被关闭时销毁其会话。在标准 cookie 管理中,没有任何明确过期的 cookie 在会话结束时被清除。我们希望保留 cookie,以便用户不必一遍又一遍地登录。
$params = session_get_cookie_params();
setcookie(
session_name(),
$_COOKIE[session_name()],
time() + 60 * 60 * 24 * 365,
$params["path"],
$params["domain"],
$params["secure"],
$params["httponly"]
);
Facebook 应用程序不会在 webview 消失时清除 cookie,这可能是因为它有智能缓存逻辑来将 webview 保留在内存中而不是释放它。