0

我刚开始使用 Ratchet ( http://maker.github.io/ratchet/ ),它很棒。但是,我遇到的一个大问题是用户必须单击注销按钮(实际上是一个锚点<a>)两次才能真正发生注销。

我打算将此作为应用程序保存到 iPhone 主屏幕,在那里它可以作为全屏 web 应用程序启动。通常,关闭此类 Web 应用程序时不会维护会话(与常规 Safari 相比,它是沙盒)。我有 99% 的把握这个点击两次注销问题是因为我不仅使用 PHP 会话,而且还使用 cookie,以便用户在关闭全屏 Web 应用程序后仍保持登录状态(根据这篇文章的第二个答案)。

我的注销脚本如下:

// logout.php

<?php

session_start();

setcookie(session_name(),"",time()-3600);
$_SESSION = array();
session_destroy();
header('Location: /');

?>

我认为这个问题可能与 Ratchet 的有关push.js,但即使我使用 设置注销链接data-ignore="push",当前页面也会在 Safari 中重新打开(这本身很烦人,因为如果用户将其保存到他们的主屏幕,我希望它仅在该全屏界面中运行),我仍然需要再次点击注销。

该问题似乎也不是将其作为全屏 Web 应用程序运行的问题,因为我在通过 Safari 访问它时遇到了同样的问题。

任何指针?

4

1 回答 1

0

我相信我解决了这个问题。从我之前发布的那个链接中,我将以下代码插入到我的所有主要 PHP 页面中:

$cookieLifetime = 365 * 24 * 60 * 60; // A year in seconds
setcookie(session_name(),session_id(),time()+$cookieLifetime);

我不完全理解这一点,但我知道它基本上是在创建一个 cookie,即使应用程序在 iOS 的沙盒全屏 Web 应用程序模式下运行,它也允许维护会话。我能够通过从我的脚本中删除此代码login.php同时将其保留在我的应用程序的每个其他页面上来解决此问题。logout.php和以前一样。现在,我保存到主屏幕的全屏 Web 应用程序将使用户保持登录状态,即使 iPhone 重新启动也是如此。他们还可以通过单击注销按钮而不是两次来注销。

于 2013-07-24T19:15:53.213 回答