访问另一个选项卡中的页面时,PHP 是否会重新初始化会话变量?

问题描述 投票:0回答:1

我正在 PHP 8.0.30 中构建一个简单的网站,用户成功登录后,特定值将添加到

$_SESSION
,包括他们最后一次访问的时间,如下所示:

index.php

<?php
  # Code below is simplified to focus on the relevant lines
  if ($userisauthenticated) {  
    $_SESSION['lastaccess'] = time();
    echo "<script>console.log('Code in index.php was run'); </script>"; 
  }
?>

如果用户将来再次加载另一个页面,我会检查上次访问的时间,如果在指定的时间限制内,则加载页面的其余部分或以其他方式将其注销。请参阅下面的示例:

仪表板.php

<?php
  session_start();
  echo "<script>console.log('lastaccess: " . $_SESSION['lastaccess'] . "' ); </script>"; 

  # The code afterwards tries to check if the user is still logged in
  if (array_key_exists('lastaccess', $_SESSION)) {
    if (time() - $_SESSION["lastaccess"] < 60 * 60 * 48) {
      # Go ahead and load page
    } else {
      # Log user out
    } 
  }
?>

但是,我遇到了一个奇怪的问题,如果我通过

index.php
登录,然后几分钟后打开一个新选项卡并通过直接输入网址访问
dashboard.php
,则
lastaccess
值与
index.php
不同已经设置了。前两行字面上就是我上面的内容,因此前面没有代码来更改
lastaccess
值。

我还在

index.php
中的控制台中插入了一个测试输出,以查看新选项卡是否由于某种原因预加载
index.php
,但是当我在新选项卡中加载
dashboard.php
时,该测试输出永远不会打印到控制台选项卡。

这种情况也只发生在我尝试此操作的某些时候(并非总是如此),这让我想知道它是否与我的浏览器有关(我使用的是 Google Chrome)。

PHP 是否有可能在新选项卡中加载页面时重新初始化存储在

$_SESSION
变量中的值?我对 PHP 会话的了解缺少什么以及导致此问题的原因是什么?

php session session-variables session-state php-8
1个回答
0
投票

原来是Google Chrome 中的预取设置。当我输入 URL 时,第一个建议是主 URL,它指向

index.php
。 Google Chrome 正在预取触发脚本的页面(我的错是没有正确设置它)。

当我打开一个新选项卡只是为了输入 URL 时发现了这一点,是否没有转到该页面并关闭了该选项卡,然后返回到我设置的测试页面以查看

lastaccess
值,刷新了一下,发现值已经更新了!

© www.soinside.com 2019 - 2024. All rights reserved.