3

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

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

下图显示了我的代码。

第一步 - 用户访问内容管理系统主菜单的 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>";        
 }


 ?>

到目前为止,所有这些功能对我来说都很好。

但是,我想确保如果用户绕过主页 url 并决定直接跳转到编辑菜单中的某个部分,他们将被强制登录(如果他们尚未登录),或者 php 将检查他们的凭据如果他们已经登录。

这是我想要放置验证的页面顶部的代码示例。我不确定顶部是否已经有数据库表连接会影响会话变量。

 <?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();
 ?>

我知道我想在所有检查“vaild_user”会话变量的php页面上放置php脚本,并且还让用户能够通过指向logout.php文件来注销。我只是不知道在这一点上如何去做。

我对这一切都很陌生,并且通常会遵循清晰的指南,就像我确定的大多数人一样。

任何人都可以提供的任何帮助将不胜感激

再次感谢!。

4

3 回答 3

5

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

<?php

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

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

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

于 2012-12-13T14:55:47.830 回答
1

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

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

您可以让用户多次登录以增加安全性(例如,当您从注册用户内容移动到管理员内容时,phpbb 会这样做),尽管这对于通用安全性而言不是必需的。

这是否回答你的问题?

于 2012-12-13T14:55:56.603 回答
0

在 session_start() 之后使用每个页面顶部的全局变量

$_SESSION['username'];
于 2012-12-13T15:01:33.730 回答