用于在多个页面上进行用户身份验证的Php会话变量
我正在创建一个内容管理网站,在后端有一个登录页面 我已经为内容管理系统的主菜单创建了一个工作登录页面 下面的图片显示了我的代码 第一步-用户访问内容管理系统主菜单的URL: 代码如下所示用于在多个页面上进行用户身份验证的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"); } ?> 可能发
<?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'];