在iPhone上的Web应用程序中维护PHP会话

Jas*_*son 7 iphone safari jquery web-applications jquery-mobile

我有一个jquery移动网络应用程序.在我的iPhone上,当我在网络应用程序上时,我有一个登录和会话变量.如果我让应用程序转到手机上的其他位置然后返回到Web应用程序,我必须再次登录.似乎会话没有得到维护.此外,如果我有一个外部链接,并打开该链接的safari,相同的会话不会转移到safari窗口.有没有办法维持会话?

Wil*_*ins 18

这个问题的答案是错误的,这很容易做到.

诀窍是这样做:

// 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);
Run Code Online (Sandbox Code Playgroud)

而已!无需本地缓存清单,您可以像在常规桌面或移动浏览器中使用网页一样使用Web应用程序中的会话.我在iPhone 5(iOS 6.1)和iPhone模拟器/ iPad 2(都是iOS 6.0)上进行了测试,即使在会话期间关闭并重新启动设备/模拟器时也能正常工作.

它运行良好:如果用户将您的Web应用程序多次添加到主屏幕,则会在多个Web应用程序实例之间共享生成的会话cookie,除非启用Safari的私人浏览模式,否则会话cookie甚至可以在冲浪时使用直接从Safari访问您的网页,而不是使用网络应用程序.因此,无论用户如何接近您的应用,当使用此策略时,当前会话似乎总是会恢复.

要自己尝试一下,session_id()在网页上使用上面的代码和输出(暂时,因为这是一个安全风险),看看它是否在主屏幕上关闭和打开你的网页应用程序之间发生了变化(尝试在会话期间重启你的设备) .如果输出的会话ID没有改变,它可以工作:它显然是由Safari存储在一些(共享)本地缓存中.

经测试并确认可在iOS 4.2.1,5.1.1,6.0和6.1下工作.

免责声明: Apple的文档明确说明需要本地缓存清单,以便在Web应用程序中本地保存数据,但此解决方案无需这样做.即,此解决方案可能依赖于Mobile Safari的无证或错误行为.但是,由于它适用于如此多的iOS版本,我认为这是预期的行为(至少在Apple的部分),只是不清楚地记录.


cee*_*yoz 2

我猜你指的是苹果“支持全屏”元标签“网络应用程序”。它们存在于沙箱中,因此不会维护会话数据。