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

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

我猜你是指苹果“全屏function”元标记“网络应用”。 它们存在于沙箱中,因此不会保留会话数据。

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

诀窍是这样做:

// 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); 

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

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

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

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

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

如果您不想在点击链接时打开safari,请使用此git。

https://gist.github.com/kylebarrow/1042026

基本上只需将文件stay_standalone.js复制到您的项目中,并在您的视图中包含以下行:

  

如果你不能使用Cookies,你必须在服务器端创建一个会话,但它将持续到用户使用相同的IP地址或服务器为会话配置的时间,这意味着用户是否为WiFi切换3g应用程序将检测到不同的IP地址,因此会话将被关闭。