单击浏览器后退按钮后丢失会话数据


missing session data after clicking browser back button

我正在用php开发一个简单的会员管理系统,遇到了一个问题:

用户登录并重定向到主页,用户ID保存在会话中;主页中有一些指向其他页面的链接,当用户单击并试图通过按浏览器"返回"按钮返回主页后,有时会话中的用户ID会丢失。

我已经检查了会话保存路径,当我单击"Back"按钮时,会创建一个新的会话文件,所以我假设session_start()为它创建了一个新会话;但我还是不知道为什么,这是一个随机的案例。。。

有什么办法解决吗?

main.php:

<?php session_start(); ?>
<?php
$echo_string = '
<body>
  <a href="a.php">a</a>
  <a href="b.php">b</a>
</body>';
if (!empty($_SESSION['user']))
  echo $echo_string;
else
  header("Location: login.php");
?>

login.php:

<?php
  session_start();
  if (isset($_POST['userLogin'])) {
    $_SESSION['user'] = $_POST['userLogin'];
    // check userLogin in db
    ...
  }
  header("Location: main.php");
?>
<form novalidate="" method="post" action="login.php">
  <label class="hidden-label" for="Username">Username</label>
  <input id="Username" name="userLogin" type="text" placeholder="Username" value="" spellcheck="false" class="">
  <label class="hidden-label" for="Passwd">Password</label>
  <input id="Passwd" name="userPassword" type="password" placeholder="Password" class="">
  <input id="signIn" name="signIn" class="rc-button rc-button-submit" type="submit" value="Log in">
</form>

a.php:

<?php session_start(); ?>
<!DOCTYPE html>
<html lang="en">
  <head>...</head>
  <?php
    $echo_string = '...'; // a html format string
    if (!empty($_SESSION['user']))
      echo $echo_string;
    else
      header("Location: login.php");
  ?>
</html>

b.php与a.php 几乎相同

谢谢。

BR,Sean

session_start()-文档:"session_start()根据通过GET或POST请求传递或通过cookie传递的会话标识符创建会话或恢复当前会话。"

所以你可以看到,当一个会话存在时,它不会创建一个新的会话,这意味着当你设置像$_SESSION['logged_in'] = true;这样的东西时,你应该检查$_SESSION是否已经被你的信息填满了