我正在使用PHP做一個簡單的動態網站,我允許用戶登錄,然後訪問特定頁面。所以這就是我迄今爲止所做的。提供登錄檢查,頁面重定向在所有頁面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()
,否則我會得到頭已發送錯誤..
奇怪的是,我已經完成了,但仍然得到與「頭已發送」erros。
所以我想什麼是設計一個網站,在那裏我必須使用Session變量在大部分的網頁,並保持這些常見的檢查,在一個共同的地方最好的方式..
- 我可以使用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」文件實際上在「?>」之前有多餘的空格,但之前我已經刪除了它,但有些文件是如何重寫的。謝謝。
沒有什麼不對您的代碼。你確定它不在頂部空行開始?在此之前你還沒有發送任何HTML? 如果沒有,你必須還包括別的,防止這種工作,所以在session_start其實也不是輸出的東西的第一個語句。也許有一些錯誤信息? – Palantir 2009-08-24 13:31:05