我遇到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服务
答案 0 :(得分:0)
经过大量搜索,我发现了问题... memcache。 由于某些未知原因,memcache和会话不能在我的PHP安装上协同工作。其他缓存系统都可以,但如果我激活memcache会话,则只能在Chrome中使用。
我也尝试过使用Memcache 3.0.8(稳定版),但结果不会改变...会话没问题,但Chrome不会在每次页面重新加载时丢失会话。