jquery - 在 iPhone 上的 Web 应用程序中维护 PHP session

标签 jquery iphone web-applications jquery-mobile safari

我有一个 jquery 移动网络应用程序。在我的 iPhone 上,当我使用网络应用程序时,我有一个登录和 session 变量。如果我离开应用程序前往手机上的另一个位置,然后返回网络应用程序,我必须再次登录。 session 似乎没有维持。此外,如果我有一个外部链接并且它为该链接打开 safari,则同一 session 不会转移到 safari 窗口。有没有办法保持 session ?

最佳答案

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

诀窍是这样做:

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

就是这样!不需要本地缓存 list ,您可以像在常规桌面或移动浏览器中处理网页一样在 Web 应用程序中处理 session 。我在 iPhone 5 (iOS 6.1) 和 iPhone Simulator/iPad 2(均为 iOS 6.0)上进行了测试,即使在 session 期间关闭并重新启动设备/模拟器,该功能也能正常工作。

效果很好:如果用户多次将您的 Web 应用程序添加到主屏幕,则生成的 session Cookie 将在 Web 应用程序的多个实例之间共享,并且除非打开 Safari 的隐私浏览模式,否则 session Cookie 甚至会被当直接从 Safari 浏览网页而不是使用网络应用程序时可用。因此,无论用户如何访问您的应用程序,使用此策略时当前 session 似乎总是会恢复。

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

经过测试并确认可在 iOS 4.2.1、5.1.1、6.0 和 6.1 下运行。

免责声明:Apple 的文档明确指出需要本地缓存 list 才能将数据本地保存在 Web 应用程序中,但此解决方案无需本地缓存 list 即可工作。即,此解决方案可能依赖于 Mobile Safari 的未记录或错误行为。然而,由于它适用于如此多的 iOS 版本,我的印象是这是有意为之的行为(至少在 Apple 方面),只是记录不明确。

关于jquery - 在 iPhone 上的 Web 应用程序中维护 PHP session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9998900/

相关文章:

iphone - AVCaptureSession 暂停和恢复记录

iphone - 单击选项卡时更改 UITabBarController 中的 UIViewController

c# - 如何在 Ubuntu 中运行 Web 应用程序 C#

php - 为什么我在使用 Ajax 时会出现此错误?

javascript - 如何从不区分大小写的下拉列表中选择一个值?

iphone - 检索 iPhone 上的默认 UI 颜色

security - 查看我的设计:网站的密码重置功能

javascript - iPad 网络应用程序 : Detect Virtual Keyboard Using JavaScript in Safari?

javascript - jQuery slideToggle 函数仅在相关元素上运行

javascript - 如果基于可用的类别,则获取跨度索引