php 会话cookie未保存在浏览器中

2cmtqfgy  于 11个月前  发布在  PHP
关注(0)|答案(1)|浏览(87)

我今天与您联系是因为我的网站上出现了一个问题,阻止我使用会话cookie提出请求。让我详细解释一下情况。
我在以下地址使用Web主机托管我的网站:https://www.coopratings.fr/。要测试,您可以使用用户名“a@a”和密码“a”登录,并使用导航栏中的“+”按钮发布游戏。
当用户想要在我的网站上执行操作时,会向服务器发送一个请求,服务器会使用“session_start()”函数和“_SESSION[“isLogged”]”变量检查用户是否登录。
问题如下:在一些机器上,“phpsessid”cookie在请求之间被保留,这使得登录验证系统能够正常运行。但在其他机器上,“phpsessid”cookie会随着每个请求而改变,这会阻止系统正常工作。
在分析问题时,我注意到每次浏览器在“POST”请求之前发送“OPTIONS”请求时,“phpsessid”cookie都会发生变化,并且我没有看到它存储在浏览器的“F12”选项卡的“存储-> Cookie”部分。
此外,当我使用XAMPP使用URL 127.0.0.1/mysite/..."在本地托管我的网站时,一切都正常工作。但是,当我使用phpStorm显示页面时,它使用了URL "http://localhost:63342/mySite/...",浏览器发送了“OPTIONS”请求(这会导致前面提到的相同问题)。
当我在本地使用localhost:63342/mySite/..."登录时,响应显示“You are not logged in”,因为我已经为注销POST请求的情况配置了它。
另一方面,当我登录到地址coopratings.fr时,控制台显示以下错误:

"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.coopratings.fr/Rest_API/...e_reviewid.php. (Reason: header 'content-type' is not allowed according to header 'Access-Control-Allow-Headers' from CORS preflight response)."

"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.coopratings.fr/Rest_API/...e_reviewid.php. (Reason: CORS request did not succeed). Status code: (null)."

"Uncaught (in promise) TypeError: NetworkError when attempting to fetch resource."

我在互联网上做了广泛的研究,并尝试了不同的解决方案,但到目前为止,我还没有能够解决这个问题。以下是我到目前为止所尝试的:

  • 通过添加以下代码处理PHP文件中的“OPTIONS”请求:
if (
    isset($_SERVER['REQUEST_METHOD'])
    && $_SERVER['REQUEST_METHOD'] === 'OPTIONS'
) {
    exit();
}
  • 使用以下配置修改响应标头:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTION');
header('Access-Control-Allow-Headers: Access-Control-Allow-Headers,Content-Type,Access-Control-Allow-Methods, Authorization, X-Requested-With, Accept, Cookie');
header('Access-Control-Allow-Credentials: true');
  • 添加“模式:'cors'“和“credentials:'include'“参数添加到请求中(不是同时)。
  • 在会话创建期间修改cookie参数:
public static function startSession(){
    $maxlifetime = 3600;
    $secure = true;
    $httponly = true;
    $samesite = 'None';

    if(PHP_VERSION_ID < 70300) {
        session_set_cookie_params($maxlifetime, '/; samesite='.$samesite, $_SERVER['HTTP_HOST'], $secure, $httponly);
    } else {
        session_set_cookie_params([
            'lifetime' => $maxlifetime,
            'path' => '/',
            'domain' => $_SERVER['HTTP_HOST'],
            'secure' => $secure,
            'httponly' => $httponly,
            'samesite' => $samesite
        ]);
    }

    session_start();
}
  • 以下是我发送请求的方式:
let url = new URL('http://127.0.0.1/coopratings/Rest_API/api/');

return fetch(url + request, {
    method: type,
    body: body,
    headers: {
        "Content-Type": "application/json",
    }
})
.then(res => {
    return res.json();
})

希望能找到解决这个问题的办法。提前感谢您的帮助。

atmip9wb

atmip9wb1#

好吧,我找到解决办法了。请确保请求相同的来源。对我来说,我已经忘记了www。并在请求中允许凭据

相关问题