3

我有一个多页网站,旨在用作 iPhone 上的网络应用程序。

它具有通常的:

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="apple-touch-startup-image" href="/images/startup.png" /> 

该站点不使用 Sencha 或 Javascript 在页面之间导航,仅使用标准锚链接和页面重新加载(我知道网络应用程序的标准方法是使用类似于 Sencha 的界面)。

从 iPhone 主屏幕启动时,它工作得非常好,并且与通过 Safari 浏览时一样。

但是,当在会议中接听电话时,似乎出现了一个问题。

通话完成后,iPhone(在本例中为版本 4)恢复到网络应用程序,但不是恢复先前查看的页面,而是重新加载主屏幕(启动网络应用程序时加载的同一页面) )

在 Safari 中查看站点并接受呼叫时,它不会执行此操作并维护 url 和当前会话值。

这是网络应用程序中的一个已知问题吗?有解决方法吗?

(我的一个想法是在本地 SQLite 数据库中维护会话和 url 值,但我不确定这是否是最好的方法)

4

3 回答 3

1

诀窍是这样做:

// Start or resume session
session_start(); 

// Extend cookie life time by an amount of your liking
$cookieLifetime = 365 * 24 * 60 * 60; // A year in seconds
setcookie(session_name(),session_id(),time()+$cookieLifetime);

我在 iOS 4.2.1、5.1.1、6.0 和 6.1 上对此进行了测试。关闭并重新启动设备后,会话甚至可以恢复。

有关此策略的更详细讨论,您可以查看我对这个问题的回答: Maintain PHP Session in web app on iPhone

于 2013-01-30T09:31:15.277 回答
0

不要将登录信息存储在 $_SESSION 变量中,而是将其存储在 $_COOKIE 中。cookie 将根据您将其设置为过期时间而保存。只要他们“在”网络应用程序或常规网络版本(cookie 相同)“内部”登录,他们就不必每次或在两者之间切换时都登录。

于 2012-03-10T19:51:19.320 回答
0

我在 iOS v10 下的 WebApp 遇到了同样的问题。这不是会话和/或 cookie 的问题(会话机制还可以,基于具有足够生命周期的 cookie)。

问题是在 WebApp 模式下运行时(即应用程序从桌面快捷方式启动,而不是 Safari),切换到另一个应用程序时“上下文”会丢失(例如接听电话)。当你回到应用程序时,请求的 URL 不是最后一个,而是保存到桌面快捷方式中的 URL...

就我而言,快捷方式是从登录屏幕创建的,所以每次我从另一个应用程序切换回我的应用程序时,都会调用 /login URL...看起来我已注销...

因此,请注意 Web 应用程序上的 URL 快捷方式。此时,我还没有找到在用户创建快捷方式时指定特定 URL 的方法。

于 2017-06-20T14:20:45.423 回答