【问题标题】:PHP Session not working no matter what - However other website worksPHP 会话无论如何都不起作用 - 但是其他网站可以工作
【发布时间】:2015-09-06 10:42:00
【问题描述】:

基本上只是为我的投资组合做一些后端,现在还很早,所以代码很乱,还有很多东西在玩。

我有会话工作,但现在他们没有。

我的网站是这样设置的:投资组合,然后是我的后端的子文件夹。它包含一个 index.php(我通过它登录),然后它应该加载dashboard.php 并传入会话(应该传入我登录的那个),然后加载所有仪表板。

但是它会加载“你没有登录”,奇怪的是......如果我故意在 index.php 上输入了错误的密码,它仍然会加载dashboard.php 并说“你没有登录”而不是只是呼应“请再试一次”

我的 index.php:http://pastebin.com/eCzxUCkY Dashboard.php:http://pastebin.com/waJ2HAXA

认为将它们张贴在那里可能会更整洁。

请帮助:(我已经重新启动了我的电脑,清除了我的缓存,完成了所有操作。它无法在本地运行,也无法在我的主机上运行。但是我确实有另一个站点运行所有相同的东西,但它仍然有效。所以我觉得它在我的实际代码中是这样的:(

【问题讨论】:

  • 那为什么不分享代码呢?
  • 我有 - 我在 pastebin 链接中发布了我的两个文件,因为我认为它更易于查看

标签: php session


【解决方案1】:

试试这个。我添加了一些额外的错误检查。

在你的登录页面上替换这个

<?php
session_start();
if (isset($_SESSION["username_login"])) {
    $username = $_SESSION["username_login"];
    $loggedIn = true;
}

有了这个

<?php
session_start();
if (isset($_SESSION["username_login"]) && $_SESSION["username_login"] != '') { // does the session exist and if so, does it have a value
    $username = $_SESSION["username_login"];
    $loggedIn = true;
} else {
    $_SESSION['username_login'] = NULL; // empty the session value
    unset($_SESSION['username_login']); // kill the session
    $loggedIn = false;
}

在您的仪表板上,替换它

<?php
session_start();
    $username = $_SESSION["username_login"];
    $loggedin = true;
}
?>

有了这个

<?php
    session_start();
    if (isset($_SESSION["username_login"]) && $_SESSION["username_login"] != '') { // does the session exist and if so, does it have a value
        $username = $_SESSION["username_login"];
        $loggedin = true;
    } else {
        $_SESSION['username_login'] = NULL; // empty the session value
        unset($_SESSION['username_login']); // kill the session
        $loggedin = false;
    }
?>

session_destroy() 不会“杀死”会话。相当于$_SESSION['something'] = ''。会话仍然存在,只是为空。

要完全终止会话,您必须“取消设置”它。

参考文献

session_destroy()

unset()

【讨论】:

  • 我添加了你的代码,但它没有修复错误:(仍然无法登录:(
  • 将其放在登录页面上// User login 行的上方。加载页面,让我们看看你得到了什么。 if($loggedIn) { echo 'logged in&lt;br&gt;'; } else { echo 'NOT LOGGED IN&lt;br&gt;'; } // what's the value of logged in 然后下一行echo 'username: '.$username.'&lt;br&gt;'; 只是一些故障排除。我开始逐步回显和删除我的页面,以找出到底发生了什么。
  • 很好奇...为什么LIMIT 1 在您的查询中?应该只有 1 个用户拥有该组确切的凭据。
  • 它说“未登录”然后下一行是“用户名:”。你有skype什么的吗?快速谈论我应该做什么可能会更容易。我试过回声和东西,但真的不知道我做了什么把这一切搞砸了..
  • 我是从教程中得到的,我也不确定它为什么会出现,但它没有引起问题,所以我从来没有费心去删除它
【解决方案2】:

我在使用会话时总是做两件事:

1) 使用 PHP 函数设置会话名称:

session_name('myAppName');
session_start();

2)如果用户登录失败,我销毁会话:

session_destroy();

所以它会删除任何可能卡在会话信息中的内容。

你试过了吗?

【讨论】:

  • 我的 logout.php 有 session_destroy(),我也尝试将它添加到失败的登录中,还添加了一个会话名称,但都没有解决我的问题 :(
  • 就像我在 OP 中指出的那样。无论用户名/密码是正确还是错误,它仍然会将我发送到仪表板(只有在正确时才应该这样做):( 这绝对不是我的数据库中的错误。
【解决方案3】:
    session_start();
    $username = $_SESSION["username_login"];
    $loggedin = true;
}

您的dashboard.php 中有一个放错位置的右大括号。您使用的是 IDE 还是文本编辑器?大多数 IDE 会突出显示语法错误。将您的代码粘贴到 Netbeans 后,我花了不到几秒钟的时间就找到了。

我猜你从index.php 复制/粘贴了这段代码,并且没有删除其中一个花括号。容易犯错误。一个不错的 IDE 会立即发现这一点。

【讨论】:

  • 啊,完全没有注意到大括号:(。我使用的是崇高文本,但遗憾的是删除大括号并不能解决问题。
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 2012-06-02
相关资源
最近更新 更多