[英]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文件中使用变量。 但是,您可以使用会话来存储和访问来自不同请求的数据。
这可能是您项目中的下一步。 用户登录后,可能有权执行该操作。 您不希望她为每个任务登录。 因此,您需要一种允许她执行这些任务而无需再次发送密码的方法。
这是一个示例,会话可以帮助您(或者您可以通过其他方式解决它)。
但是对于您现在拥有的代码,您不需要会话,就可以了。
如果我正确理解了您,您想知道为什么您可以从另一个脚本中的一个脚本访问变量。
答案很简单:无论何时调用include
或require
,所包含代码中的所有内容(所有变量和方法)都可以在调用者脚本中找到。 这意味着所包含脚本的每一行代码都在调用者脚本中执行。
这意味着您必须小心处理以下内容:如果在脚本中定义一个函数并两次包含该脚本,则PHP会在指出该名称的函数已定义的地方抛出错误。 为了避免这种情况,可以使用include_once
或require_once
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.