2013-10-30 22 views
6

ログインスクリプトがユーザの信頼性をチェックし、ヘッダ機能を使用して受信ボックスページにリダイレクトするログインページのコードを次に示します。セッション変数が動作しないPHP

<?php 
session_start(); 

include_once('config.php'); 
$user=htmlentities(stripslashes($_POST['username'])); 
$password=htmlentities(stripslashes($_POST['password'])); 
// Some query processing on database  

if(($id_user_fetched<=$id_max_fetched) && ($id_user_fetched!=0)){ 
$_SESSION['loggedIn'] = 'yes'; 
    header("Location:http://xyz/inbox.php?u=$id_user_fetched"); 
    //echo 'Login Successful'; 
    }else{ 
     echo 'Invalid Login'; 
     echo'<br /> <a href="index.html">Click here to try again</a>'; 
     } 
}else{ 
    echo mysqli_error("Login Credentials Incorrect!"); 
    } 
?> 

inbox.phpページは次のようになります。上記のコードで今すぐ

<?php 
session_start(); 
echo 'SESSION ='.$_SESSION['loggedIn']; 
if($_SESSION['loggedIn'] != 'yes'){ 
echo $message = 'you must log in to see this page.'; 
//header('location:login.php'); 
} 
//REST OF THE CODE 

?> 

、inbox.phpは常に出力を示しています。 SESSION =あなたはこのページを参照してくださいするにはログインする必要があります。 これは、セッション変数が設定されていないか、またはinbox.phpがセッション変数を取得できないことを意味します。どこが間違っていますか?

+1

「エコー」にする必要がありますログイン資格情報が正しくありません! ; 'not' echo mysqli_error( "Login Credentials Incorrect Incorrect!"); ' – undone

+0

' if'文の条件が 'true'と評価されることをデバッグできますか? (つまり、真と偽のブロックのステートメントをエコーし​​て、どちらが発射しているかを確認してください) – Crackertastic

+0

1.両方のスクリプトを同じドメインから呼び出すのですか? 2.あなたはどんな種類のsession_name、session_id、session_set_cookieを使用しますか? 3. session_startが値を返します。それを確認しますか? –

答えて

19
  1. 任意のセッションが呼び出されている前にsession_start();が呼び出されていることを確認します。だから安全な賭けは、あなたのページの冒頭に、他の何よりも前に、タグ<?phpを開いた直後に置くことです。また、開封<?phpタグの前に空白/タブがないことを確認してください。
  2. headerのリダイレクト後、現在のスクリプトをexit();で終了します(他にもsession_write_close();session_regenerate_id(true)がありますが、それらも試すことができますが、私はexit();を使用します)。
  3. テストするために使用しているブラウザでCookieが有効になっていることを確認してください。
  4. register_globalsがオフになっていることを確認するには、php.iniファイルとphpinfo()ファイルで確認できます。オフにする方法は、thisを参照してください。
  5. セッションを削除しなかったか、空でないことを確認してください。
  6. $_SESSIONスーパーグローバル配列のキーがどこにも上書きされていないことを確認してください。
  7. 同じドメインにリダイレクトされていることを確認してください。したがって、www.yourdomain.comからyourdomain.comにリダイレクトしても、セッションは転送されません。
  8. ファイルの拡張子が.phpであることを確認してください(起こります!)。

PHP session lost after redirect

+0

サーバーエラーである可能性がありますか?私は以下のように最も基本的なテストの例を試しました:session.php <?PHP session_start(); //セッションデータを保存します $ _SESSION ['views'] = 1; header( 'Location:session2.php'); ?> session2.php: <?php session_start(); //セッションデータを取得します echo "Pageviews =" $ _SESSION ['views']; ?> – Arihant

+0

私は同じ問題があります。原因:空きディスク領域がありませんでした。 – Cuarcuiu

+0

私のために同じ問題。私はGoogleのクラウドプリントを使用してページを印刷しようとしましたが、セッションはクローズ/クリアされています。この問題を解決するには – Karthi

1

ちょうどホスティングサービスに話を聞いた、それは彼らの最後の課題でした。 彼は「あなたのアカウントのsession.save_pathは結果の問題が発生したため設定されていませんでした。

そして、それは後に正常に動作している:)

7

私はしばらくの間、同じ問題を持っていたし、それを考え出すに非常に苦労しました。私の問題は、セッションが正しく機能している間にサイトがしばらく働いていて、突然すべてが壊れたことでした。

明らかに、私のsession_save_path()は/ var/lib/php5 /だったので、777のchmodパーミッションが必要です。私は間違ってそれを変更し、セッションを完全に破った。

修正するには、sudo chmod -R 777 /var/lib/php5/(またはあなたのsession_save_path()が何であれ)をlinuxで実行してください。

EDIT:バックエンドサーバーを実行しているユーザーを知っている場合、777へのアクセス許可を変更するのは最適な解決策ではありません。sudo chmod -R 700 /var/lib/php5/を実行し、次にsudo chown -R www-data /var/lib/php5/を実行して、phpユーザーがそのフォルダにアクセスできるようにします。

+0

777は、セッション保存フォルダに対する不正なアクセス権のセットです。フォルダの所有権を変更して、WebサーバーがWebサーバーに書き込みを許可し、他のすべてのアクセスを禁止する必要があります。 – user2182349

+1

HOOOOLY SHIT男、あなたの人生の中で最高の、私は次のページにセッションを得ることができなかったので、私は文字通り泣いていました。 –

1

接続スクリプトを使用する場合は、接続時にsession_start();を使用することを忘れないでください。その問題に気づく前に、いくつか問題があります。

0

私は同様の問題とCookieドメインとしていた:

ini_set('session.cookie_domain', '.domain.com'); 

ドメインはので、すべてのセッションがユーザのクッキー権が設定されなかったために無視された間違った設定だったが、これは、誰かを助けることを願っています。

2

おそらく、セッションパスが正常に動作していない場合は、代替パスとしてsession.save_path(path/to/any folder);を試してみてください。それが動作する場合は、ホスティングプロバイダにデフォルトパスの問題について問い合わせることができます。

0

今日この問題が発生しました。問題は$ config ['base_url']と関係があります。私はhtpp://www.domain.comに気づき、http://example.comが問題でした。修正するには、常にbase_urlをhttp://www.example.comに設定してください。

1

セッションが動作しないその他の重要な理由は、セッションCookieの設定で再生することです。簡単な間違いや理由のために他の開発者が原因でセッションのクッキーライフタイムを0または他の低い値に設定する。

session_set_cookie_params(0) 
関連する問題