Chrome会话数据丢失

时间:2017-08-18 12:29:38

标签: php google-chrome session oauth

我遇到Chrome和PHP会话问题。 我正在构建一个将用于我的组织的OAuth2服务器,并且OAuth2部分工作正常但是当我尝试在OAuth2授权请求之前实现简单登录时,每次刷新Chrome页面时都会重置PHP会话(已经使用Firefox,Safari和Edge测试过。

由于该文件位于根目录中,所以 NOT 缺失,因为我的图标尚未准备就绪,因此不会出现版权侵权行为。

我的PHP OAuth2 authorize.php:

<?php
require_once __DIR__.'/server.php';

$request = OAuth2\Request::createFromGlobals();
$response = new OAuth2\Response();

if (!$server->validateAuthorizeRequest($request, $response)) {
    $response->send();
    die;
}
if(!isset($_SESSION['logged_in_user'])){
    $link = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    echo "<script>window.location.href = \"login.php?next=".urlencode($link)."\";</script>";
    die('');
}
if (empty($_POST)) {
  exit('
<form method="post">
  <label>Do You Authorize TestClient?</label><br />
  <input type="submit" name="authorized" value="yes">
  <input type="submit" name="authorized" value="no">
</form>');
}
$is_authorized = ($_POST['authorized'] === 'yes');
$server->handleAuthorizeRequest($request, $response, $is_authorized);
$response->send();

我的login.php:

<?php
    if(!isset($_SESSION['logged_in_user'])){
        if(empty($_POST)){
?>
<form method="post">
  <label>Do You Want To Login To TestClient?</label><br />
  <input type="submit" name="authorized2" value="yes">
  <input type="submit" name="authorized2" value="no">
</form>
<?php
        }else{
            $_SESSION['logged_in_user'] = true;
            echo "<script>window.location.href = \"".urldecode($_GET['next'])."\";</script>";
            die('');
        }
    }else{echo "<script>window.location.href = \"".urldecode($_GET['next'])."\";</script>";}
?>

正如您所看到的,这是一个非常简单的代码(稍后我将实现真正的数据库提取登录)。

我用于OAuth2的PHP库是你可以在github上找到的bshaffer中的一个,“server.php”文件是你可以在库菜谱中找到的。

我的会话的php.ini值: php.ini session values

如果有人想尝试访问,我正在通过Google OAuth 2.0 Playground进行测试。

游乐场的设置值: playground setup values

有人有解决方案吗?

编辑1 :我安装的PHP版本是7.1.8作为ISPConfig 3.1.6上的FPM服务

1 个答案:

答案 0 :(得分:0)

经过大量搜索,我发现了问题... memcache。 由于某些未知原因,memcache和会话不能在我的PHP安装上协同工作。其他缓存系统都可以,但如果我激活memcache会话,则只能在Chrome中使用。

  • PHP 7.1.8
  • Memcache 3.0.9-dev
  • Memcached 3.0.3

我也尝试过使用Memcache 3.0.8(稳定版),但结果不会改变...会话没问题,但Chrome不会在每次页面重新加载时丢失会话。