簡體   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