用于多页上的用户身份验证的Php会话变量

时间:2012-12-13 14:50:35

标签: php mysql database session-variables

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

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

以下图片显示了我的代码。

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


 ?>

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

但是,我想确保如果用户绕过主页并决定直接跳转到编辑菜单中的某个部分,他们将被强制登录,如果他们还没有,或者,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文件让用户能够注销。我现在还不确定如何去做。

我对这一切都很陌生,一般都遵循明确的指南,就像大多数人一样,我敢肯定。

任何人都可以给予的帮助将不胜感激

再次感谢!

3 个答案:

答案 0 :(得分:5)

基本上,您只需在每个“受保护”页面上使用此代码段:

<?php

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

如果他们已登录,则会获得注销链接和页面的其余部分。如果他们尚未登录,则会将其重定向到登录页面。

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

答案 1 :(得分:1)

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

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

您可以让用户多次登录以增加安全性(例如,当您从注册用户内容移至管理员内容时,phpbb会执行此操作),但不需要用于通用安全性。

这会回答你的问题吗?

答案 2 :(得分:0)

在session_start()

之后的每个页面顶部使用全局变量
$_SESSION['username'];