7

PHPコードでセッションをそのように設定しました:$_SESSION['user_id'] = $login;これは、サーバーにアップロードされ、さまざまなページに渡って実行されている間は正常に機能しているようですが、ローカルマシンでWebサイトをテストしているときに、スクリプトを終了した後、セッションがすぐに設定解除されるようです設定されている場所。

XAMPP とまったく同じコードを使用して、ローカル マシンでテストしています。

この問題が発生している理由がわかりません。役立つ回答をいただければ幸いです。

動作しない例:

$_SESSION['user_id'] = $login;
echo '<META HTTP-EQUIV="refresh" content="0;URL=../home.php">';  

編集1:

ログインする関数全体を次に示します(クラスの一部です)。

public function loggingIn(){
    session_start();

    $db = new Database('localhost','root','','userdata');
    $userFunctions = new Users($db);

    $username = $_POST['usernameInput'];
    $password = $_POST['passwordInput'];

    if(empty($username) || empty($password)){
        $this->errors['u&p'] = 'Please Enter Your Username AND Password';
        $this->printE();
    } elseif($userFunctions->user_exists($username)===false){
        $this->errors['nm'] = 'That Username/Password Combination Is Not Valid';
        $this->printE();
    } else {
            $login = $userFunctions->login($username, $password);

    if($login === false){
            $this->errors['nm'] = 'That Username/Password Combination Is Not Valid';
            echo 'Login Failed!';
        } else  {
           if(!$userFunctions->economyTableExistsForUser($login)){
               $userFunctions->createEconomyTableForUser($login);   
           }
           if(!$userFunctions->schoolTableExistsForUser($login)) {
               $userFunctions->createSchoolTableForUser($login);    
           }

               $_SESSION['user_id'] = $login;

               echo $_SESSION['user_id'];  // working fine

               header('Location: ../home.php');
        }
    }   
}
4

11 に答える 11

11

あなたの家庭用マシンに次のものがないと仮定しましょう:

session.autostart = On

あなたのphp.iniで、他のマシンは明らかにそうです。

PHP コードで次のように設定していることを確認してください。

session_start();

PHP: session_start - マニュアル

そうしないと、私の最初の推測が真でない限り、セッションは開始されません。

さらに、 localhost のPHPバージョンとphp.iniの設定を確認する必要があります。セッション ファイルを保存するディレクトリが書き込み可能であり、セッション ファイルが実際に存在することを確認してください。

編集1:

リダイレクトには PHP ソリューションを使用することをお勧めします。

header("Location: /");
exit();

編集2:

PHP には、HTTP ヘッダーを変更する関数があります。それらのいくつか:

編集3:

改行とスペースが問題になる可能性がありますが、 UTF-8 BOM (Byte-Order-Mark)Warning: Cannot modify header informationなどの原因となる目に見えない文字シーケンスもあります。として保存されていることを確認して、ファイルを再保存してみてください。UTF-8 (no BOM)

編集4:

コードを適切にデバッグするには、PHP がすべての警告と通知を表示することを確認してください。セッション開始前に実行します。

ini_set('display_errors', -1);

編集5:

session.gc_maxlifetime設定も確認する必要があります。

session.gc_maxlifetime
session.gc_maxlifetimeは、データが「ガベージ」と見なされてクリーンアップされるまでの秒数を指定します。セッションの開始時にガベージ コレクションが発生します。

編集6:

Sublime Text で空白を表示するには、設定を編集します。

// Set to "none" to turn off drawing white space, "selection" to draw only the
// white space within the selection, and "all" to draw all white space
"draw_white_space": "selection",

[設定] -> [設定のデフォルト] で設定できます。ユーザー設定を編集する場合は、[設定] -> [設定] - [ユーザー] を選択し、以下のように行を追加します。

{
    "font_size": 10,
    "draw_white_space": "all"
}

また、コードを適切にデバッグするために、他のすべての特殊文字が表示されていることを確認してください!

編集7:

session_write_close();最後に、リダイレクトの直前に追加してみてください。

編集8:

PHP ファイルのsession_start();,session.save_path = "/home/username/tmp";ディレクティブの前に設定します。public_htmltmpの外に dir を作成します。dir にchmod 770があり、同じユーザー/グループ権限で作成されていることを確認してください。ホームディレクトリで実行して、新しいディレクトリに、たとえばpublic_htmlなどの他のディレクトリと同じユーザー/グループがあるかどうかを確認します。そうでない場合は、 を実行して root としてパーミッションを変更してください。tmpls -lsatmpchown username:groupname /home/username/tmp

于 2013-10-28T20:39:31.620 に答える
4

これに関する簡単な更新。この応答は非常に有用であることがわかりましたが、私の XAMPP のインストールでは、session.autostart=On の php.ini エントリが少し異なることに注意してください。私は以下を見つけました:

; リクエストの起動時にセッションを初期化します。; http://php.net/session.auto-start session.auto_start=0

これを次のように変更しました。

; リクエストの起動時にセッションを初期化します。; http://php.net/session.auto-start session.auto_start=1

于 2015-05-09T12:09:26.230 に答える
2

php.ini( )でセッション Cookie が有効になっていることを確認しxamp\php\php.iniます。

session.use_cookies=1
于 2015-09-21T10:22:36.543 に答える
1

あなたのphp.iniチェックで:

  1. variables_order手紙が含まれていますS
  2. session.save_pathが存在し、PHP を実行しているユーザーが書き込み可能であることを確認してください。
于 2013-10-28T20:41:20.470 に答える
1
  1. 開けるphp.ini
  2. session.auto_start を変更します"1"
  3. "Stop"実行中の場合は Apache
  4. "Save" php.ini
  5. "Start"アパッチ
于 2020-03-04T07:34:35.667 に答える
1

.htm/.html ドキュメント内に埋め込まれた PHP を使用している場合は、Apache がそれらを適切に処理できるようにする必要があります。これを行うには、httpd.conf を編集して次の行を追加します。

AddType application/x-httpd-php .html .htm

セクションへ<IfModule mime_module>

于 2016-04-29T07:55:17.697 に答える
0

php ini で「session.cookie_path」を確認してください。デフォルトでは「session.cookie_path=/」です。

于 2021-01-07T11:50:52.307 に答える