0

ユーザーがすでにログインしている場合は、インデックスページでセッションを作成する必要があります。セッションはメンバーページにヘッダーされます。ユーザーがセッションを破棄すると、インデックス(ログインページ)に留まります

私がしたことは

if(session_start){
    header("location:member.php") or die();
}

if(isset($_POST['email']) && isset($_POST['password'])){



$email=strtolower($_POST['email']);
    $password=md5($_POST['password']);



if($email && $password){
        $connect=mysql_connect("localhost", "root", "");
        $database=mysql_select_db("phplogin", $connect);



$SQL=mysql_query("SELECT * FROM users WHERE email='$email'");
        $numrows=mysql_num_rows($SQL);



if($numrows!=0){
            while($result=mysql_fetch_assoc($SQL)){
                $db_email=$result['email'];
                $db_password=$result['password'];
                $db_firstname=$result['firstname'];
                $db_lastname=$result['lastname'];
                }
            }
        else{
            die("Can't find the user");
            }



if($email==$db_email && $password==$db_password){
            session_start();
            $_SESSION['firstname']=$db_firstname;
            $_SESSION['lastname']=$db_lastname;
            header("location:member.php");
            }   
        else{   
            die("wrong username or password");
            }
        }
    else{die("Please enter email or password");}
    }

これは、ユーザーがセッションを破棄していない場合に機能しますが、ユーザーがセッションを破棄すると、インデックスページに留まりませんでした

Facebookのようなものが必要ですが、Facebookがログインページとユーザーページで同じドメイン名を共有する方法がわかりません。

したがって、facebook.comと入力するたびに、ユーザーページに移動します。ログアウトすると、ログインページになります。

4

3 に答える 3

2

を使用しif(session_start)ました。session_start()関数です。そして、それはすべてのページで使用されます。したがって、毎回リダイレクトされます。

もう1つsession_start()は、セッションを保存しているページと、セッション値を取得しているページを表示する必要があります。

それ以外の:

if(session_start){
    header("location:member.php") or die();
}  

使用する:

session_start();
if(isset($_SESSION['firstname']) && isset($_SESSION['lastname'])){
    header('location:member.php');
}
//and REMOVE session_start(); from where you have written.
于 2012-12-03T11:58:00.773 に答える
0

初めに; ユーザーがログインしているかどうかを確認する場合は、セッションが存在するかどうかを確認するだけでは不十分です(ユーザーがログインしていなくても、セッションはまったく同じように存在する可能性があります)。したがって、is_logged_in()最初に関数(またはそのようなもの)を記述して、ログイン状態を適切にチェックする必要があります。

ユーザーが常にリダイレクトされる理由は、セッションが正常に開始されると関数session_start()が戻るためです。trueセッションが破棄されると、新しいセッションが開始されます。したがって、基本的にtrue、すべてが正しく機能している場合(ユーザーがCookieをオフにしていないなど)、ほぼ常に返されます。

あなたがその関数を書いたなら、それは実際には非常に簡単です。2つのファイルがあるとしましょう:home.phpmember.php。1つ目はホームページ(「Hellovisitor!」メッセージとログインフォーム付き)、2つ目はメンバーページです。両方のファイルが「スタンドアロン」スクリプトである場合、実際にユーザーを特定のページにヘッダーすることができます(header('Location: home.php');ユーザーが最初にログインする必要header('Location: member.php');がある場合、ユーザーがすでにログインしている場合)。

だが!ページを「クローク」したい場合(Facebookのように)、index.phpにファイルを含めることができます。このようなことをします:

if(is_logged_in()) {
    require_once('member.php'); // present member profile page
} else {
    require_once('home.php'); // present login page
}

index.phpで定数を設定して(定数についてはphpマニュアルも参照)、ファイルをindex.php内からのみ含めることができるようにすることができます。

--- index.php:

define('VALID_INCLUDE', true);
// the rest of your code

--- home.php&member.php:

if(!defined('VALID_INCLUDE')) die('You should not request this page directly');

ただし、このようなアプリケーションを作成する場合は、フレームワークが大いに役立つ可能性があることに注意してください。この種の問題をカバーし、コーディングを大幅に高速化します(ほとんどのフレームワークには、ある種の認証モジュールが付属しており、上記で行ったように、「ビュー」を使用してユーザーに適切なページを表示できますrequire_onceソリューション)。

于 2012-12-03T11:56:37.150 に答える
0

あなたのページの上にどうですか

if(!isset($_SESSION['firstname']) || !isset($_SESSION['lastname'])){
    header("location:index.php") or die();
}
于 2012-12-03T11:46:25.770 に答える