1

私はstackoverflowから多くを学びました。私は奇妙な問題に遭遇しました、ここに行きます。

セッションが開始されたかどうかをチェックするコーディングがあり、開始されていない場合はセッションを開始します。そこに問題はありません

これが私のコードです

If (session-id = "")
{Session_start();
/* setting session ids */
}

同じスクリプト(上記のスクリプト)にフォームを送信するインクルードファイルがあります

ただし、postメソッドを使用してページに戻ると、セッションが停止したかのように、セッションが再開されます。

編集

If(session_id == "")

間違いはタイプミスでした。

私が最初に抱えていた問題は、最初の初期化時にセッション配列を設定していたことでした

/* If statement */
$_Session['test'] = ['1','2','3','4','5'];
/* end of if statement */

ユーザーが同じスクリプトにデータを送信すると、セッション配列がnullになり、エラーが発生します。私が解決した方法は、session_startをスクリプトの先頭に配置し、ifステートメントには配置しないことでした。それは問題を解決したようでした、あなたのすべての入力に感謝します。

4

3 に答える 3

4

私はあなたがこれが欲しいと思います

if(session_id() == '') {
     Session_start();
    /* setting session ids */
}

session_id()現在のセッションのセッションIDを返します。現在のセッションがない場合(現在のセッションIDが存在しない場合)は空の文字列( "")を返します。


また、複数の電話をかけ session_start()ても問題ありません。

session_start()-新規セッションを開始するか、既存のセッションを再開します


PHPバージョンではそれ >=5.4.0を使用することもできますsession_status()

session_status()現在のセッションステータスを返すために使用されます。


編集済み

さて、セッションを2回開始することが問題になる場合があるようです

DaveRandomのこのコメントを引用してい ます

セッションがすでに開始されている場合。再開することはできません。停止していないものを再開することはできません。これでメッセージが表示されなくなりますが、そもそもなぜ電話をかけたいのかわかりませんsession_start()。またsession_write_close()、ローカルの$ _SESSION変数は破棄されないため、セッションを閉じた後に書き込みを試みないように注意してください。

だからあなたはこれを次のように行うことができます

<?php

  var_dump(isset($_SESSION));
  session_start();
  var_dump(isset($_SESSION));
  session_write_close();
  var_dump(isset($_SESSION));
  session_start();

コードパッド

于 2013-01-22T08:45:30.963 に答える
1

が設定されているか確認してください$_SESSION

isset($_SESSION) or session_start();

http://codepad.viper-7.com/I3i9lv

于 2013-01-22T08:46:01.283 に答える
0

セッションを維持するためだけに、すべてのページの上部からセッションを開始する必要があります。実行中のセッションはクリアされないため、開始するための条件を削除するだけです。

于 2013-01-22T08:43:08.077 に答える