【问题标题】:Php session variables for user authentication on multiple pages用于在多个页面上进行用户身份验证的 PHP 会话变量
【发布时间】:2012-12-13 14:50:34
【问题描述】:

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

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

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

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

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

我对这一切都很陌生,而且我相信大多数人都会按照清晰的指南进行大致了解。

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

再次感谢!

【问题讨论】:

标签: php mysql database session-variables


【解决方案1】:

基本上,您的每个“受保护”页面上都会有类似 sn-p 的内容:

<?php

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

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

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

【讨论】:

  • 感谢您的回复,您提供的代码很有意义,我将其放在受保护页面的最顶部,但是我仍然触发无法修改标题 - 输出开始错误。这让我很困惑,因为在我开始会议之前我没有做任何事情。 ://
  • php &lt;? ... ?&gt; 代码块之外的任何内容,包括 unicode BOM,都可以触发输出
  • 你的意思是在 ,.?> 之上的任何东西,因为我的代码的 myline 从字面上开始,它后面没有别的东西。它在我的编辑器的第 1 行。 ...
  • php 之类的仍然会发出警告。使用类似 httpfox 或 firebug 的下一个选项卡来查看原始响应。
【解决方案2】:

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

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

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

这能回答你的问题吗?

【讨论】:

  • 如何在每个页面上为 $valid_user 设置会话变量?道歉,我对这一切都很陌生。谢谢你的回复。
【解决方案3】:

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

$_SESSION['username'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    相关资源
    最近更新 更多