2012-02-17 18 views
4

私は最近、ASP洞窟から出現したばかりで、PHPの日光に慣れていません。PHPセッション変数を作成すると、ブラウザがハングアップする

私の現在の問題は、セッション変数を作成する単純なログインシーケンスにあります。そのステップでは、ブラウザがハングアップして不規則に動作します。

私のログインページ(A.php)から、ログインフォームはパスワードを処理し、セッション変数を作成して別のファイル(C.php)にリダイレクトするB.php(下記)に送られます。

簡潔にするため、私はログインが成功したと仮定しています。 B.phpには次のものが含まれています:

<?php 
session_start(); 
require "../scripts/base/toolbox.php"; 

fnProcessLogin(); 

function fnProcessLogin(){ 
    $passwd = strtoupper($_POST["passwd"]); 
    if (strlen($passwd)==0) 
    { 
    $passwd=strtoupper($_SESSION['plpassword']); 
    unset($_SESSION['plpassword']); 
    } 
    try{ 
    $db = Database::getDB(); 
    $sql="SELECT securitylevel, staffID, staffname, stafflname, staffemail, iRoleID FROM staff WHERE staffpasswd=?;"; 
    $data = array($passwd); 
    $query = $db->prepare($sql); 
    $query->execute($data); 
    if($query->rowCount()>0){ 
     $row = $query->fetch(); 
     $a=$passwd."|".$row['staffID']."|".$row['staffname']."|".$row['stafflname']."|".$row['staffemail']."|".$row['iRoleID']; 
     $_SESSION['admin'] = $a; 
     header('Location: C.php'); 
    } 

} 
    catch(PDOException $pe){ 
    echo "We are sorry, but we cannot complete this database operation."; 
    file_put_contents('PDOerrors.txt',$pe->getMessage(),FILE_APPEND); 
    } 
} 

?> 

"$ _SESSION ['admin'] = $ a;"リダイレクトはうまく動作しますが、セッション変数を作成しようとするとブラウザがハングアップして最終的にファイルを正しくロードできないC.phpになります。 [戻る]ボタンのアクションは、ブラウザを無限ループにするようです。

この洞窟人は何が間違っているのですか?

ありがとう、

ブライアン。

+0

"私のブラウザがハングする" O'rly? –

+0

なぜパスワードを大文字にしていますか?または私はそれを間違ってreadnigですか? – PeeHaa

+1

また、本当にセッションにパスワードを保存する必要がありますか?そして、なぜあなたは '$ _SESSION'を追加するためにユーザデータのために多次元配列を使いませんが、'? 'で区切られた文字列を使うのですか? – PeeHaa

答えて

2

私はここで推測しています。

ロケーションヘッダーの後にexit();が必要です。リダイレクト後にさらに多くのデータが出力されている場合(おそらく、セッションがクッキーを設定しようとしている場合など)、リダイレクトは失敗します。

何が起こるかをテストしてみてください。

セッション割り当て後にsession_write_close()を試して、リダイレクトを試みる前にすべてのセッション関連データを強制終了することもできます。私はまだexit();をお勧めします。

+0

Leighありがとうございますが、いずれのオプションも違いはありません。私はこのページへのリダイレクトも変更しました(ちょうどC.phpに何か問題があった場合に備えて)。リダイレクトは問題ありませんでしたが、B.phpに戻った場合、システムは永遠にページに接続し、インクルードファイルは読み込まれず、PHPエラー通知がページに書き込まれます。うんざり! – Bruce

+0

@ user1216097:これらのことが疑わしいときには、私はたいてい 'tcpdump 'の頭にいます。 – Leigh

関連する問題