【发布时间】: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