我正在使用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, 肖恩
答案 0 :(得分:-1)
session_start()
- 文档:
“session_start()
根据通过GET或POST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递。”
所以你看,当一个会话存在时它不会创建一个新的,这意味着当你设置$_SESSION['logged_in'] = true;
之类的东西时,你应该先检查$_SESSION
是否已经填满你的信息