在iPhone网页应用中维护PHP会话

3
我刚刚在我的 iPhone 上创建了一个 Web 应用程序。我可以打开它并成功登录,但每次我返回该应用程序时,它都会忘记我的上一个会话,我必须重新输入我的用户名和密码。
关于这个问题已经有一些其他的问题,但它们的答案并没有帮助我解决问题,因为我不确定应该把提供的 PHP 放在哪里。
这是我找到的最好的答案:Maintain PHP Session in web app on iPhone 在这个答案中,Wilbo Baggins (https://stackoverflow.com/users/346440/wilbo-baggins) 提供了以下代码:
// 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);

我将那段代码放在网站头部的<?php?>标签之间,但没有解决问题。我猜想我的位置不对,所以我正在寻求指导,以了解实际应该把它放在哪里。
谢谢。
-- BUMP:有人能帮助我解决这个问题吗?或者至少知道如何联系Wilbo Baggins(https://stackoverflow.com/users/346440/wilbo-baggins)吗?

嗨Max,我碰巧发现了你的问题:)。你尝试输出 session_id(),就像我在那个问题上的回答中提到的吗?你确认你每次都得到了不同的session_id()吗?看起来你的解决方案应该是有效的,所以我还不确定问题出在哪里。 - Wilbo Baggins
@WilboBaggins,我目前遇到了类似的问题。您介意看一下我的问题吗?谢谢。 - J.Do
@J.Do,没问题,但你指的是哪个问题? - Wilbo Baggins
@WilboBaggins 这个问题 https://stackoverflow.com/questions/54533864/ionic-app-phpsessid-changes-on-each-http-request-on-ios-but-works-fine-on-android - J.Do
1个回答

4
在您的login.php文件中,当登录信息正确时,请添加以下代码:
session_start();

//your code here

if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']),"apple")) //to prevent cookies for non-apple devices
{
    $cookieLifetime = 365 * 24 * 60 * 60; // A year in seconds
    setcookie("ses_id",session_id(),time()+$cookieLifetime);
}

接下来,在每个你想要恢复session_id的*.php文件中,在session_start()之前添加以下代码:

if($_COOKIE['ses_id']){
    session_id($_COOKIE['ses_id']);
}
session_start();

在你的logout.php中,加入以下代码:
session_start();
$cookieLifetime = 365 * 24 * 60 * 60; // A year in seconds
setcookie("ses_id","",time()-$cookieLifetime); //set lifetime to negative to autodelete cookie
session_destroy();

希望这能帮助到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接