【问题标题】:Chrome session data lostChrome 会话数据丢失
【发布时间】:2018-01-27 03:24:56
【问题描述】:

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

favicon 不会丢失,因为该文件位于根目录中(在网络上随机找到 favicon,因为我的 favicon 尚未准备好,无意侵犯版权)。

我的 PHP OAuth2 授权.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>";}
?>

如您所见,这是一段非常简单的代码(稍后我将实现真正的 db fetch 登录)。

我用于 OAuth2 的 PHP 库是您可以在 github 上找到的来自 bshaffer 的库,“server.php”文件是您可以在库说明书中找到的那个。

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

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

游乐场的设置值: playground setup values

有没有人可以解决这个问题?

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

【问题讨论】:

  • 我没有在您的示例页面顶部看到 session_start session basics
  • 如果你看到我的 php.ini : "session.auto_start" => "On"

标签: php google-chrome session oauth


【解决方案1】:

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

  • PHP 7.1.8
  • Memcache 3.0.9-dev
  • Memcached 3.0.3

我也尝试过 Memcache 3.0.8(稳定版),但结果没有改变...会话正常,但在每次重新加载页面时都会丢失会话的 Chrome 中却不行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多