php - 刷新页面后会话丢失[重复]

Posted

技术标签:

【中文标题】php - 刷新页面后会话丢失[重复]【英文标题】:php - session lost after refreshing page [duplicate] 【发布时间】:2014-08-16 04:31:47 【问题描述】:

所以我正在为我的网站开发一个登录系统,我想在用户登录时更改导航栏,但我无法让它工作,因为在我刷新页面以更新导航栏。这是我在 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。任何想法该怎么做?谢谢!

【问题讨论】:

你把session_start();放了吗 session_start() 必须在每个访问的页面中,最好在脚本的开头。 @Lix 我在索引页上说的是 将 session_start() 放在页面顶部。 【参考方案1】:

首先,不需要 javascript 将您重定向到索引页面。你也可以用 PHP 来做:

header("Location: index.php");

所以 login.php 将如下所示:

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

请注意,我已更改顺序。与其他人一样,我强烈建议将 session start 置于所有代码之上

最后确保你已经在 index.php 文件中启动了会话(这也应该放在你所有的代码之上):

session_start();

编辑:如果您想坚持使用您的 javascript 方法(我强烈不推荐),那么您的 login.php 代码应该如下所示:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于php - 刷新页面后会话丢失[重复]的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 3 会话在页面刷新后销毁

在刷新页面 MVC 上丢失的 JavaScript 中动态创建的内容

PHP自动刷新页面而不会丢失用户输入

PHP避免刷新页面重复提交

刷新给出空白页php [重复]

刷新页面后发布的文件[重复]