1年前,我已经建立了一个非常好的PHP社交网络。通过浏览器,一旦用户登录,我使用$ _SESSION变量来存储凭证并通过所有页面记住用户。一切都运作良好。
现在我正在尝试使用Phonegap和jQuery Mobile构建网站的应用版本。乍一看,我尝试使用相同的方法:管理用户登录我使用电子邮件和密码实现了一个简单的表单,它向“check_login.php”文件发送ajax请求。 如果电子邮件和密码是正确的,我“登录用户”,这意味着我将所有内容存储在会话变量中,就像我一直这样。
我注意到,这让我发疯,是使用这种方法数据没有存储到$ _SESSION变量中。使用我的应用程序,每次我向服务器发送AJAX请求时,$ _SESSION变量都消失了,看起来似乎没有存储登录数据。就像我从未登录过。(当然,我已经将session_start()放在每个页面的顶部)。而且,每次我向服务器发送一个AJAX请求时,session_id()都会改变。
这是正常的吗?这是不是意味着Phonegap我不能依赖$ _SESSION变量或者我只是缺少一些东西? 如果是,为什么?
答案 0 :(得分:1)
此方法的最大问题是纯PHP会话将在短时间内到期(默认值为24分钟)。所以你正在进行不间断的调用,这些调用可能跨越那个时间边界。
围绕这个
有几种方法首先是更改会话处理程序以将会话保存为更长期的会话(like a database)。更多开销,但您可以将会话ID保留更长时间并将其存储在localStorage
。
第二种方法是直接将您的登录标记。因此,用户登录并获得一些随机散列(即md5(uniqid(mt_rand(), true))
)作为其令牌。然后,您的应用会联系特殊页面并传递该令牌,您可以在令牌表中进行检查。这样可以让您更好地控制登录。您可以随意使用令牌过期,并且不会与PHP会话相同。