我正在使用 PHP 制作一个简单的动态网站,我允许用户登录然后访问特定页面。所以这就是我到目前为止所做的。
登录值是通过 php 脚本中的 $_POST 变量获取的,它从数据库中为注册用户获取值。如果找到用户,我将执行以下操作:
session_register('userid');
$_SESSION['userid'] = $username;//this is taken from $_POST
$_SESSION['accesslevel'] = $access;
在我放的 php 脚本的开头session_start();
现在我的问题来了。
现在在每个页面上,我必须检查用户是否被允许查看该页面,如果他不是,那么他必须被重定向到 login.php,如果他是,那么页面加载必须继续。
现在到目前为止,我所学到的是,在 php 页面中维护值的唯一方法是使用$_SESSION变量,并且我使用会话变量的任何页面我都必须session_start()在每个页面上写为第一行,否则我将得到 Headers Already Sent错误..
奇怪的是,我确实做到了,但仍然会出现“已发送标题”的错误。
所以我想设计一个网站的最佳方式是什么,我必须在大多数页面上使用会话变量,并将这些常见的检查放在一个共同的地方..
- 我可以如何使用 include() 功能吗?
- 会话是跨 php 页面传递数据的唯一方式。
- 有什么更好的方法?
我有以下代码:
<?php
session_start();
if(!isset($_SESSION['user']))
{
$_SESSION['loc'] = "adminhome.php";
header("location:ettschoollogin.php");
exit();
}
?>
它位于要检查用户是否已登录的每个页面的顶部。
这是检查登录的脚本
<?php
session_start();
include("connection.php");
$userid =$_POST['userid'];
$userpwd =$_POST['userpwd'];
$query="Select UNAME,UPASSWORD,SCHOOL,uaccess from schooluser where uname = '$userid'";
$result=mysql_query($query) or die("couldn't execute the query");
$row=mysql_fetch_array($result);
$useraccess = $row["uaccess"];
$school =$row[2];
if(($row[0]==$userid)&&($row[1]==$userpwd))
{
session_register('userid');
$_SESSION['userid']=$userid;
$_SESSION['school']=$school;
if($useraccess =="admin")
{
header("Location:adminhome.php");
}
if($useraccess !="admin")
{
header("Location:school_main.php");
}
}
else
{
header("Location:ettschoollogin.php?err=1");
}
?>
我知道在“?>”之后有多余空格的常见错误,但我仍然明白。
谢谢大家,我错过了,“connection.php”文件实际上在“?>”之后有多余的空格,我之前已经删除了它,但是文件又是如何被重写的。非常感谢。