【问题标题】:Can i use PHP $_SESSION variable with jQuery Mobile?我可以在 jQuery Mobile 中使用 PHP $_SESSION 变量吗?
【发布时间】:2014-11-10 14:56:20
【问题描述】:

1 年前,我制作了一个运行良好的 PHP 社交网络。通过浏览器,一旦用户登录,我使用 $_SESSION 变量来存储凭据并通过所有页面记住用户。一切正常。

现在我正在尝试使用 Phonegap 和 jQuery Mobile 构建网站的应用程序版本。乍一看,我尝试使用相同的方法:为了管理用户登录,我使用电子邮件和密码实现了一个简单的表单,它将 ajax 请求发送到“check_login.php”文件。 如果 email 和 pw 正确,我“登录用户”,这意味着我将所有内容都存储在 session 变量中,就像我一直做的那样。

我注意到,这让我抓狂的是,使用这种方法数据没有被存储到 $_SESSION 变量中。使用我的应用程序,每次我向服务器发送 AJAX 请求时,$_SESSION 变量都消失了,看起来登录数据没有被存储。就像我从未登录过一样。(当然,我已将 session_start() 放在每个页面的顶部)。此外,每次我向服务器发送 AJAX 请求时,session_id() 都会发生变化。

这正常吗?这是否意味着 Phonegap 我不能依赖 $_SESSION 变量,或者我只是错过了一些东西? 如果是,为什么?

【问题讨论】:

  • 检查session_id()。确认您在任何地方都获得了相同的会话 ID。如果不是,那么会话 cookie 会丢失,您的移动设备会获得新的/不同的会话。例如您并没有“丢失”您的会话 - 您只是获得了新的会话。
  • phonegap/cordova 不适用于会话。是众所周知的问题。使用 localstorage 等其他方法,或使用 deviceId 进行身份验证。只是谷歌有很多howto。

标签: php ajax session jquery-mobile cordova


【解决方案1】:

这种方法最大的问题是纯 PHP 会话会在很短的时间内过期(默认为 24​​ 分钟)。因此,您正在进行间隔不一致的调用,可能会跨越该时间边界。

有几种方法可以解决这个问题

首先是更改您的会话处理程序以更长期地保存会话 (like a database)。更多开销,但您可以将会话 ID 保留更长时间并将其存储在您的 localStorage 中。

第二种方法是直接标记您的登录信息。因此,用户登录并获得一些随机哈希(即md5(uniqid(mt_rand(), true)))作为他们的令牌。然后您的应用程序联系一个特殊页面并传递该令牌,您可以在令牌表中检查它。这将使您能够更好地控制您的登录。您可以随意使令牌过期,并且不会受到 PHP 会话的影响。

【讨论】:

  • 正如@wayne 所说,我不知道,这是Cordova 的问题。顺便说一句,您的解决方案是我正在考虑的解决方案,但在加快时间之前,我想确保 Cordova 确实不适用于 PHP 会话。顺便说一句,感谢您的回答:)
猜你喜欢
  • 2011-11-19
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
相关资源
最近更新 更多