web-dev-qa-db-ja.com

セッション変数が機能しない

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

<?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がセッション変数を取得できないことを意味します。どこがおかしいの?

12
Arihant
  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セッションが失われました

31
revo

私はしばらくの間同じ問題を抱えていて、それを理解するのに非常に苦労しました。私の問題は、セッションが正常に機能する状態でサイトをしばらく動作させた後、突然すべてが壊れたということでした。

どうやら、あなたのsession_save_path()は、私にとっては/ var/lib/php5 /でしたが、正しいパーミッションを持っている必要があります(phpを実行しているユーザー、例えばwww-dataはディレクトリへの書き込みアクセスが必要です)。誤って変更して、セッションを完全に中断しました。

実行Sudo chmod -R 700 /var/lib/php5/ その後 Sudo chown -R www-data /var/lib/php5/ phpユーザーがフォルダにアクセスできるようにします。

8
Vadman

セッションパスが適切に機能していない場合は、session.save_path(path/to/any folder);関数を代替パスとして試すことができます。それが機能する場合、デフォルトのパスの問題についてホスティングプロバイダーに問い合わせることができます。

3
Ashraf Ali

接続スクリプトを使用する場合、接続でもsession_start();を使用することを忘れないでください。その問題に気付く前に問題が発生しました。

2

ホスティングサービスと話をしただけで、彼らの最後の問題でした。 「結果として問題が発生したため、アカウントsession.save_pathが設定されていませんでした。今すぐ設定しました。」

そして、それはその後正常に動作します:)

1
Arihant

セッションが機能しないその他の重要な理由は、セッションCookieの設定で遊ぶことです。セッションCookieの有効期間を0またはその他の低い値に設定するのは、単純なミスまたは他の開発者による理由によるものです。

session_set_cookie_params(0)

私は同様の問題を抱えていて、クッキードメインで:

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

ドメインが正しく設定されていなかったため、ユーザーCookieが正しく設定されなかったため、すべてのセッションが無視されました。

0
talsibony

私は同じ問題に直面していましたが、問題を解決するために次の手順を実行しました

  1. ファイル/etc/php.iniを編集し、session.save_path = "/ var/lib/php/session"というパスを検索しました。セッション情報を指定する必要があります

2その後、下記の権限を変更しました* chown root.Apache/var/lib/php/session *それだけです。上記の手順で問題が解決します

0
Aman Shukla

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

0
Devqxz