0

login.phpファイルがあります:

<?php

session_start();

include('db.php');

            if(isset($_POST['email']) && !empty($_POST['email']) AND isset($_POST['password']) && !empty($_POST['password'])){
                $email = mysql_escape_string($_POST['email']);
                $password = mysql_escape_string($_POST['password']);

                $search = mysql_query("SELECT * FROM users WHERE email='".$email."' AND password='".$password."' AND active='1'") or die(mysql_error()); 
                $match  = mysql_num_rows($search);

                if($match > 0){
                    $row = mysql_fetch_assoc($search);
                    $user=$row['forename'].' '.$row['surname'];
                    $_SESSION['username']=$user;
                    //$msg = 'Login Complete! Thanks, '.$user.'!';
                    header( 'Location: page1.php' ) ;
                    die;
                }else{
                    $msg = 'Login Failed!<br /> Please make sure that you enter the correct details and that you have activated your account.';
                }
            }


?>

ここで、page1.phpをロードすると、問題が発生します。ファイルにはこれが含まれています...

<?php

session_start();

include('db.php');

if(isset($_SESSION['username'])){
    echo 'Success, '.$_SESSION['username'].'!';
}else{
    echo 'No dice!';
    //header( 'Location: login.php' ) ;
}

?>

ユーザー名が保存されていない場合は、ログインにリダイレクトするのが理想的です。もしあれば、彼らに見せたいです。しかし、「サイコロなし!」と表示されます。毎回、データを正しく取得(または保存)していないようです。私は何が間違っているのですか?


明確にするためにelse、index.phpのセッションデータセットを参照している必要があるため、が起動するべきではありません。リダイレクトは問題ではありません。


問題は、奇妙な設定をした私のホストに固有のものでした。彼らに連絡すると、彼らは私が設定するために使用しなければならなかった正しいパス情報を私に提供してくれましたsession_save_path。これに基づいて正解を授与しました。

4

2 に答える 2

3

リダイレクトの形式が正しくありません。次のように、完全なURLを指定する必要があります。

header('Location: http://your.site.com/page1.php');
die;

リダイレクト後にスクリプトを終了することが重要です。

セッションデータが保持されない場合は、構成に問題がある可能性があります。PHPの構成を確認し、セッションデータが保存されている書き込み権限を確認します。

<?php phpinfo();?>
于 2013-02-27T15:27:12.317 に答える
1

私はこれについてコメントしますが、50 rep未満の制限は、何らかの理由でコメントできないことを意味します。試す

$row = mysql_fetch_assoc($search);
$user=$row['forename'].' '.$row['surname'];
echo 'User: '.$user.'<br />';

$_SESSION['username']=$user;
echo 'Session: '.$_SESSION['username'];

//header( 'Location: page1.php' ) ;

変数に実際に何かが保存されているかどうかを確認します。

編集:これを試してください

if($match > 0){
   $row = mysql_fetch_assoc($search);
   $user=$row['forename'].' '.$row['surname'];
   $_SESSION['username']=$user;
   $_SESSION['logintrue'] = true;
   //$msg = 'Login Complete! Thanks, '.$user.'!';
   header( 'Location: page1.php' ) ;
   die;
}

session.php

<?php
session_start();

if(!$_SESSION['logintrue'])
{
header( 'Location: login.php' ) ;
}

$SessionUsername = $_SESSION['username'];
?>

page1.php

<?php

require_once 'session.php';
require_once 'db.php';

echo 'I work now maybe?<br />';
echo $SessionUsername;
?>

include 'db.php';インクルードは関数ではないので、私もその間違いを犯したようにそれらを書いてください。

于 2013-02-27T15:43:37.247 に答える