Php PDO:isset&;会话不工作

Php PDO:isset&;会话不工作,php,mysql,forms,pdo,isset,Php,Mysql,Forms,Pdo,Isset,我有一个密码安全的页面,只能通过用户名和密码访问。每件事都必须是正确的,但我认为它不是 这是我的表单(index.php)和pdo: 这是我的注销代码(logout.php): 编辑 在index.php文件中: 尝试放置session_start()$_会话['name']=$_POST['name']介于$membre=$stmt->fetch(PDO::fetch_ASSOC)之间和标题(“位置:test.php”)然后按照我在原始答案中输入的条件语句进行操作 这是我测试并为我工作的结果

我有一个密码安全的页面,只能通过用户名和密码访问。每件事都必须是正确的,但我认为它不是

这是我的表单(index.php)和pdo:

这是我的注销代码(logout.php):


编辑 在
index.php
文件中:

尝试放置
session_start()$_会话['name']=$_POST['name']介于
$membre=$stmt->fetch(PDO::fetch_ASSOC)之间
标题(“位置:test.php”)然后按照我在原始答案中输入的条件语句进行操作

这是我测试并为我工作的结果:

...

    if($nbMembre == 1){
        $membre = $stmt->fetch(PDO::FETCH_ASSOC);
        
// my addition

session_start();
$_SESSION['name'] = $_POST['name'];

        header("location:test.php");
    } else {
        $msg="<font color='orange'>Enter username and password.</font>";
    }
} else {
    $msg ="<font color='red'>Lgon!</font>";
}

...
// rest of code
然后这就是您的test.php

<?php
session_start();
require 'connect.php';

    if(isset($_SESSION['name']) && !empty($_SESSION['name'])){

        echo "session is set";
        echo "<br>";
        echo $name;

        } else  { 

        //  echo "session is NOT set";
         header("location:index.php");

                }
/* old method
if(!isset($_SESSION['name'])){
header("location:index.php");
exit();
    }
*/

?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
</head>
<body>
<header>
</div>
wellcome
Hellos-.....
<br>
<a href="logout.php"><h2>Logout</h2></a>
</div>
</body>
</html>

试验
惠康
你好——。。。。。


密码:

我还注意到您正在使用存储密码。不再建议这样做

以下是一些密码存储选项:

  • PHP5.5的函数
其他链接:


会话:

以下是有关会话的直观教程:


您忘记了
符号,但问题是test.php页面中的(!isset($\u SESSION['name'])。示例中您没有设置会话名称。此外,这也是处理密码的**错误**方式。即使使用参数绑定和散列,也不应将密码传递到查询中。您在哪里保存$\u会话信息?也许您应该指定用户成功登录的时间
$\u POST['name']=$\u会话['name']
然后执行
if(isset($\u SESSION['name'])&&!empty($\u SESSION['name']){//do something}其他{//do something}
我想你的意思是把它放在test.php中,而不是放在表单的顶部?顺便说一句,它不会返回任何内容,并且会话不会因为注销而被破坏。按原样运行,不做任何其他操作,输入用户名,您将看到它出现在顶部@然后,您可以在所有页面中使用条件语句。这将检查会话是否已设置且不为空。您可以修改它以满足您的需要。echo的名字不会来自帖子,而是来自会话本身。重新加载我的答案,我已经让它更清晰了,我添加了一个新的test.php文件@KimFYEAH,在index.php中,我应该用表单发布值,我应该把这些命令放在将值发送到DB的代码的顶部吗?只有在您使用会话的情况下,是的@金夫
<?php
session_start();
$_SESSION = array();
session_destroy();
if(!isset($_SESSION['name'])){
 header("location:index.php");
}else{
 echo"<h2> There was a problem with logging out!</h2>";
 exit();
}

?>
...

    if($nbMembre == 1){
        $membre = $stmt->fetch(PDO::FETCH_ASSOC);
        
// my addition

session_start();
$_SESSION['name'] = $_POST['name'];

        header("location:test.php");
    } else {
        $msg="<font color='orange'>Enter username and password.</font>";
    }
} else {
    $msg ="<font color='red'>Lgon!</font>";
}

...
// rest of code
<?php
session_start();
// require 'connect.php';

if(isset($_POST['submit'])){

    $name = $_POST['name'];
    $_SESSION['name'] = $_POST['name'];

if(isset($_SESSION['name']) && !empty($_SESSION['name'])){

    echo "session is set";
    echo "<br>";
    echo $name;

    } else  { 

        echo "session is NOT set";

            }

       } // brace for if(isset($_POST['submit']))
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
</head>
<body>

<form action="" method="post">
<label for="name">Username: </label>
<input type="text" name="name" /><br/>
<label for="password">Password: </label>
<input type="password" name="password" /><br/>
<input type="submit" name="submit" value="TEST" />

</form>
</body>
</html>
<?php
session_start();
require 'connect.php';

    if(isset($_SESSION['name']) && !empty($_SESSION['name'])){

        echo "session is set";
        echo "<br>";
        echo $name;

        } else  { 

        //  echo "session is NOT set";
         header("location:index.php");

                }
/* old method
if(!isset($_SESSION['name'])){
header("location:index.php");
exit();
    }
*/

?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
</head>
<body>
<header>
</div>
wellcome
Hellos-.....
<br>
<a href="logout.php"><h2>Logout</h2></a>
</div>
</body>
</html>