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

时间:2013-12-05 08:30:58

标签: php

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

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

我已经检查了会话保存路径,当我点击“返回”按钮时会创建一个新会话文件,所以我假设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, 肖恩

1 个答案:

答案 0 :(得分:-1)

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

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