我在使用Chrome和PHP會話時遇到問題。 我正在構建將用於我的組織的OAuth2服務器,OAuth2部分工作正常,但是當我嘗試在OAuth2授權請求之前實現簡單登錄時,PHP會話每次在Chrome上刷新頁面時都會重置(已經使用Firefox,Safari和Edge進行測試)。Chrome會話數據丟失
最喜歡的圖標是不是由於該文件位於根目錄(因爲我的圖標還沒有準備好,沒有版權侵犯意圖,所以在網上找到了隨機圖標)。
我的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庫是bshaffer中的一個,您可以在github上找到,「server.php」文件就是您可以在庫食譜中找到的文件。
會話我的php.ini值: php.ini session values
如果有人想嘗試訪問,我通過谷歌的OAuth 2.0遊樂場做我的測試。
操場的設定值: playground setup values
有沒有人有一個解決方案?
編輯1:我已經安裝了PHP版本7.1.8是作爲在ISPConfig 3.1.6
我沒有在您的示例頁面頂部看到session_start [會話基礎](http://php.net/manual/en/session.examples.basic.php) – JDA
如果您看到我的php.ini: 「session.auto_start」=>「開」 – Zed93