Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于在多个页面上进行用户身份验证的Php会话变量_Php_Mysql_Database_Session Variables - Fatal编程技术网

用于在多个页面上进行用户身份验证的Php会话变量

用于在多个页面上进行用户身份验证的Php会话变量,php,mysql,database,session-variables,Php,Mysql,Database,Session Variables,我正在创建一个内容管理网站,在后端有一个登录页面 我已经为内容管理系统的主菜单创建了一个工作登录页面 下面的图片显示了我的代码 第一步-用户访问内容管理系统主菜单的URL: 代码如下所示 <?php session_start(); echo $_SESSION['valid_user']; if(!isset($_SESSION['valid_user'])) { $URL="error.php"; header("Location: $URL"); } ?> 可能发

我正在创建一个内容管理网站,在后端有一个登录页面

我已经为内容管理系统的主菜单创建了一个工作登录页面

下面的图片显示了我的代码

第一步-用户访问内容管理系统主菜单的URL: 代码如下所示

<?php
session_start();

echo $_SESSION['valid_user'];

if(!isset($_SESSION['valid_user']))
{
$URL="error.php";
header("Location: $URL");
}
  ?>

可能发生两件事。1如果他们在登录前未登录,将被引导到错误页面。 然后,他们可以选择访问登录页面,并使用用户名和pswd登录

我已经声明了?php start_session();?在顶端

<?php

$login = $_POST['name'];
$loginpass =$_POST['password'];

 if((isset($login)) || (isset($loginpass))){

    //echo "<p> form has been submitted</p>";

    include("connect.php");

    $query = "select * from logins where 
        username='$login' and pswd=MD5('$loginpass')";
      $result = mysql_query($query) or die($query."<br/><br/>".mysql_error());

    $count=mysql_num_rows($result);
    echo $count;

if($count > 0){

   echo "<p>you are logged in as $login please 
   go to <a href='home2.php'>edt     home</a>.</p>";
    echo "<p><a href='logout.php'>log out</a> $login?</p>";
    $_SESSION['valid_user'] = $login;

}else{

    echo "<p>sorry login failed</p>";

}

  }else{

    //echo "<p> form  hasn't been submitted</p>";
    //Visitor needs to enter a name and password                
    echo "<h1>Please Log In</h1> <form method='post' action='index2.php'>";
    echo "<p>Username: <input type='text'name='name'></p>";
    echo "<p>Password: <input type='password' name='password'></p>";
    echo "<p><input type='submit' name='submit' value='Log In'></p></form>";        
 }


 ?>

基本上,您的每个“受保护”页面上都会有类似的代码片段:


如果他们登录,他们会得到一个注销链接和页面的其余部分。如果他们还没有登录,他们会被重定向到登录页面


会话不受数据库连接或任何其他代码的影响。在您开始会话或尝试重定向之前执行了输出,会影响他们。这将触发“无法修改标题-输出从第XXX行开始”警告并禁用重定向。

您只需要在用户将信息提交到登录页面后验证其凭据。然后,您可以设置一个会话变量(这里似乎您使用的是
$valid\u user
),如果该变量存在,那么他们已经通过了身份验证

事实上,出于安全原因,您不应该在系统的任何位置存储他们的密码。您应该在登录页面上对他们的密码输入进行散列,然后将其与散列后的数据库值进行比较

您可以让用户多次登录以增加安全性(例如,当您从已注册的用户内容移动到管理员内容时,phpbb会这样做),但对于一般用途的安全性来说,这不是必需的


这是否回答了您的问题?

在会话_start()之后的每页顶部使用全局变量


请在执行任何其他操作之前清理您的数据库输入:感谢您的回复,您提供的代码很有意义,我将它放在受保护页面的最顶端,但是我仍然会触发“无法修改标题-输出已启动”错误。这让我困惑,因为我在启动会话之前没有执行任何操作。:/php
代码块的ide,包括unicode BOM,可以触发输出。你是说代码的myline从字面上开始,后面没有其他内容。它位于我的编辑器的第1行……仍然可能有php和其他什么发出的警告。使用类似httpfox或firebug的下一个选项卡来查看raw response.我如何在每个页面上为$valid_用户设置会话变量?抱歉,我对所有这些都不熟悉。不过感谢您的回复。
 <?php

include("connect.php");
//echo "all good here";


//grab the data from the table 'designs'
$query ="SELECT * FROM designs ORDER BY id";


//send SQL statement to MySQL server
$display = mysql_query($query);
$num = mysql_numrows($display);


 mysql_close();
 ?>
<?php

session_start();
if (!isset($_SESSION['valid_user'])) {
   header("Location: login.php");
   exit();
}
?>
<a href="logout.php">Logout</a>
$_SESSION['username'];