私のPHPコードでは、セッションがすでに開始されていて、新しいセッションを開始しようとすると、次の通知が表示されます。
注意:セッションはすでに開始されています-session_start()を無視します
どうすればこれを回避できますか?
私のPHPコードでは、セッションがすでに開始されていて、新しいセッションを開始しようとすると、次の通知が表示されます。
注意:セッションはすでに開始されています-session_start()を無視します
どうすればこれを回避できますか?
session_start()
インクルードの1つに入れ、require_once
必要なすべてのファイルに入れました。
回答:
試してみてください
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
新しいものが必要な場合は、session_destroy()
開始する前に行ってください。開始する前に設定されているかどうかを確認するには、次のように呼び出しますsession_status()
。
$status = session_status();
if($status == PHP_SESSION_NONE){
//There is no active session
session_start();
}else
if($status == PHP_SESSION_DISABLED){
//Sessions are not available
}else
if($status == PHP_SESSION_ACTIVE){
//Destroy current and start new one
session_destroy();
session_start();
}
PHPはこの関数を次のように明示的に実装しているため 、メソッドを呼び出す$_SESSION
代わりにグローバルをチェックすることは避けsession_status()
ます。
新しい関数session_statusを介してセッションステータスを公開しますこれは(PHP> = 5.4.0)用です
$ _SESSIONのブロック動作を修正しようとしたときに、この問題が発生しました。
http://konrness.com/php5/how-to-prevent-blocking-php-requests/
スクリプトが完了するか、セッションが手動で閉じられるまで、セッションファイルはロックされたままになります。
したがって、デフォルトでは、ページは読み取り専用モードでセッションを開く必要があります。ただし、読み取り専用で開いたら、書き込みモードにするには、閉じてから再度開く必要があります。
const SESSION_DEFAULT_COOKIE_LIFETIME = 86400;
/**
* Open _SESSION read-only
*/
function OpenSessionReadOnly() {
session_start([
'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME,
'read_and_close' => true, // READ ACCESS FAST
]);
// $_SESSION is now defined. Call WriteSessionValues() to write out values
}
/**
* _SESSION is read-only by default. Call this function to save a new value
* call this function like `WriteSessionValues(["username"=>$login_user]);`
* to set $_SESSION["username"]
*
* @param array $values_assoc_array
*/
function WriteSessionValues($values_assoc_array) {
// this is required to close the read-only session and
// not get a warning on the next line.
session_abort();
// now open the session with write access
session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME ]);
foreach ($values_assoc_array as $key => $value) {
$_SESSION[ $key ] = $value;
}
session_write_close(); // Write session data and end session
OpenSessionReadOnly(); // now reopen the session in read-only mode.
}
OpenSessionReadOnly(); // start the session for this page
次に、値を書きに行くとき:
WriteSessionValues(["username"=>$login_user]);
この関数は、key => valueペアの配列を取り、さらに効率的にします。
これを試して
if(!isset($_SESSION)){
session_start();
}
ob_start();を使用することをお勧めします。sesson変数を開始する前に、これはブラウザバッファを注文する必要があります。
編集:$ _ SESSIONの後に余分な)を追加しました
<?php
if ( session_id() != "" ) {
session_start();
}
基本的に、別のセッションを作成する前に、セッションが開始されたかどうかを確認する必要があります。...もっと読む。
一方、を使用して別のセッションを作成する前に、既存のセッションを破棄することを選択しましたsession_destroy()
。