PHPを使用して単純な動的Webサイトを作成しています。ここでは、ユーザーがログインして特定のページにアクセスできるようにしています。これが私がこれまでにしたことです。
ログインした値は、登録ユーザーのデータベースから値をフェッチする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()
。そうしないと、ヘッダーが既に送信されます。エラー..
不思議なことに、私はそれを正確に実行しましたが、それでも「ヘッダーはすでに送信されています」とエラーが発生します。
したがって、ほとんどのページでSession変数を使用し、これらの一般的なチェックを共通の場所に保持する必要があるWebサイトを設計するための最良の方法を知りたいと思います。
- 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」ファイルは私が前にそれを削除した「?>」の後に実際に余分なスペースを持っていました、しかしいくつかの方法でファイルは再び書き直されました。どうもありがとう。