PHP登录验证不工作或注销不工作
我可以登录到我的页面,但当我单击“注销”并在地址栏中键入URL时,它仍然允许我输入。这让我相信,它没有正确地验证我的凭证,因此允许我进入。我已经有一段时间没有使用PHP了,所以我不是完全最新的,所以任何帮助都将不胜感激 需要登录才能访问的页面的开头:PHP登录验证不工作或注销不工作,php,login,Php,Login,我可以登录到我的页面,但当我单击“注销”并在地址栏中键入URL时,它仍然允许我输入。这让我相信,它没有正确地验证我的凭证,因此允许我进入。我已经有一段时间没有使用PHP了,所以我不是完全最新的,所以任何帮助都将不胜感激 需要登录才能访问的页面的开头: <?php session_start(); if ($_SESSION['myusername'] !== 'myusername'){ header("location:main_login.php"); } ?> M
<?php session_start();
if ($_SESSION['myusername'] !== 'myusername'){
header("location:main_login.php");
}
?>
My checklogin.php:
if($count==1){
// Register $myusername, $mypassword and redirect to file "blogedit.php"
session_start();
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
header("location:/blogedit.php");
} else {
echo ("<SCRIPT LANGUAGE='JavaScript'>
window.alert('Username and password entered do not match. Please try again.');
window.location.href='/main_login.php';
</SCRIPT>");
}
if($count==1){
//注册$myusername、$mypassword并重定向到文件“blogedit.php”
会话_start();
$\会话['myusername']=$myusername;
$\会话['mypassword']=$mypassword;
标题(“位置:/blogedit.php”);
}否则{
回声(“
window.alert('输入的用户名和密码不匹配。请重试');
window.location.href='/main_login.php';
");
}
My logout.php
<?php
session_start();
session_unset();
session_destroy();
header("Location: /journal.php");
?>
您需要使用比较运算符<代码>=不是比较运算符<代码>=将尝试将左侧设置为右侧。在这种情况下(使用字符串),这将始终成功。你应该使用==代码>:
if (!isset($_SESSION['myusername']) or $_SESSION['myusername'] !== 'myusername') {
# user not authenticated
}
正如弗雷德所说,用
在$\u会话['myusername']
前面,您正在检查$\u会话['myusername']
是否为空(0,false,null),但您正在同一过程中将其设置为等同于“myusername”。这就是if语句的内容永远不会被命中的原因
您还必须包括session_start()
inside checklogin.php,因为它必须位于使用会话的所有页面中。是session_start()代码>内部checklogin.php?如果没有,请添加它。此$\u会话['mypassword']=$mypassword代码>是非常不鼓励的。听说过会话劫持吗?^特别是考虑到密码在会话中似乎没有任何用处。在此语句中,您到底想做什么:if(!$\u session['myusername']='myusername'){在我看来这是错误的。我认为应该是:if($\u session['myusername']='myusername')){@Fred ii-不是,我在哪里添加它有关系吗?事实上,我认为OP正在尝试检查它是否未设置。它没有使用正确的语法。@Devon,所以我添加了这些更改。现在,我根本无法访问页面,即使使用正确的登录信息或访问URL。我更新的代码在上面。如果(!isset),也可以执行($_SESSION['myusername']){…}
或如果(!isset($_SESSION['myusername'])&&$_SESSION['myusername']!='myusername')){…}
@Fred ii-如果(!isset($_SESSION['myusername']){…}
这就是诀窍所在,非常感谢。如果你将此作为答案发布,我会接受吗?@user3758073没关系。让Devon将其包括在答案中。我很高兴我能提供帮助,干杯——一旦他这样做,你就可以接受了。
if (!isset($_SESSION['myusername']) or $_SESSION['myusername'] !== 'myusername') {
# user not authenticated
}