PHP - 刷新页面后会丢失 session

3

我正在为我的网站开发一个登录系统,当用户登录时,我希望更改导航栏,但是当我刷新页面以更新导航栏时,会话(session)始终丢失,因此无法实现。以下是我的login.php脚本:

if ($loginNumRows == 1) {
   echo 'true';
   session_start();
   $_SESSION['username'] = $loginRow['name'];

当这个值为“true”时,以下 JavaScript 代码将被加载:
if (html == 'true') {
    window.location.href = "index.php";

我尝试使用“location.reload(true);”,但仍然没有改变。在主页面中,导航栏所在的位置,我进行了以下检查:

<?php if (isset($_SESSION))
            {...}

然而,这总是返回false。有什么想法怎么做?谢谢!

3
你有没有写 session_start(); - ɹɐqʞɐ zoɹǝɟ
1
session_start() 必须在每个访问的页面中,最好在脚本开头。 - Ballantine
1
@Lix,我在谈论主页上的内容。 - ɹɐqʞɐ zoɹǝɟ
1
将session_start()放在页面顶部。 - Anju Aravind
3个回答

2

首先,不需要使用JavaScript将您重定向到索引页面。您也可以从PHP中实现:

header("Location: index.php");

那么login.php将会像这样:

if ($loginNumRows == 1) {
   session_start();
   $_SESSION['username'] = $loginRow['name'];
   header("Location: index.php");

请注意,我已经改变了顺序。其他人强烈建议在所有代码之上放置会话开始。最后,请确保在index.php文件中也启动了会话(这也应该放在所有代码之上)。
session_start();

编辑:如果您想坚持使用JavaScript方法(我非常不建议),那么您的login.php代码应该如下所示:

if ($loginNumRows == 1) {
   session_start();
   $_SESSION['username'] = $loginRow['name'];
   echo 'true';

2

请确保在所有脚本的顶部都有session_start();

该函数是用于启动会话的,可以让您在不同页面之间共享用户数据。

1
如上所述,我会先将session_start()放在页面上所有其他代码之前,而不是在条件语句中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接