繁体   English   中英

我在不使用session_start()的情况下在不同的php文件中使用了变量。 我对session_start()缺少什么,什么时候应该使用此函数?

[英]I use variables in different php files without using session_start(). What am I missing about session_start() and when should I use this function?

我是PHP新手。 我正在做一个小项目(从数据库中读取数据,密码,从中读取数据)以学习PHP,并且使用了一些以不同PHP文件的形式获取的变量。 我以为我应该使用session_start()和全局变量$ _SESSION在不同的PHP文件中使用相同的变量。 下面是我的代码,我将这些文件放在一个文件夹中:index.php(HTML和表格),conn.php(与数据库的连接),login.php(从数据库中读取数据的文件)

有人可以向我解释为什么在这种情况下我不需要使用session_start(),在什么特定情况下需要使用全局变量$ _SESSION?

index.php文件:

<?php
include_once "conn.php";

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>

    <form id="login" method="POST" action="login.php">
        <label for="loginUsername">Username</label>
        <input type="text" id="loginUsername" name="loginUsername">
        <br>
        <label for="loginPassword">Password</label>
        <input type="password" name="loginPassword" id="loginPassword"><br>
        <input type="submit" name="login" value="Login">
    </form>
</body>
</html>

conn.php:

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "loginsystem";

    $conn = mysqli_connect($servername, $username, $password, $dbname);

login.php中:

<?php
    include_once "conn.php";


    if(isset($_POST["login"])){

        $username = $_POST["loginUsername"];
        $password = $_POST["loginPassword"];

        echo $password;
        $sql = "SELECT password FROM users WHERE username=?;";

        $stmt = mysqli_stmt_init($conn);

        mysqli_stmt_prepare($stmt, $sql);
        mysqli_stmt_bind_param($stmt, 's', $username);
        mysqli_stmt_execute($stmt);

        $result = mysqli_stmt_get_result($stmt);
        while($row=mysqli_fetch_assoc($result)){
            echo $row["password"];
        }

    }

您需要首先使用session_start,在session_start之后只能使用$ _SESSION变量。我建议您编写config.php的第一行。

您不需要会话即可在其他php文件中使用变量。 但是,您可以使用会话来存储和访问来自不同请求的数据。

这可能是您项目中的下一步。 用户登录后,可能有权执行该操作。 您不希望她为每个任务登录。 因此,您需要一种允许她执行这些任务而无需再次发送密码的方法。

这是一个示例,会话可以帮助您(或者您可以通过其他方式解决它)。

但是对于您现在拥有的代码,您不需要会话,就可以了。

如果我正确理解了您,您想知道为什么您可以从另一个脚本中的一个脚本访问变量。

答案很简单:无论何时调用includerequire ,所包含代码中的所有内容(所有变量和方法)都可以在调用者脚本中找到。 这意味着所包含脚本的每一行代码都在调用者脚本中执行。

这意味着您必须小心处理以下内容:如果在脚本中定义一个函数并两次包含该脚本,则PHP会在指出该名称的函数已定义的地方抛出错误。 为了避免这种情况,可以使用include_oncerequire_once

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM