ホームページ > バックエンド開発 > PHPチュートリアル > 古い PHP のバグ: 重複した Set-Cookie ヘッダーを受信しましたか?

古い PHP のバグ: 重複した Set-Cookie ヘッダーを受信しましたか?

藏色散人
リリース: 2023-04-11 08:18:01
転載
4898 人が閲覧しました

古い PHP のバグ: 重複した Set-Cookie ヘッダーを受信しましたか?

#PHP が重複した Session Set-Cookie ヘッダーを出力する場合の問題を解決するにはどうすればよいですか?

今日、これまで発見したことのない古いバグに遭遇しました。フロントエンド応答は 2 つの重複した Set-Cookie ヘッダーを受信しました。

私は当惑し、長い時間をかけてトラブルシューティングを行った結果、最終的に、session_start() 関数の繰り返し呼び出しが原因であることが判明しました。

session_start() 関数が呼び出されるたびに、Set-Cookie ヘッダーが出力されます。

解決策:

session_start();
session_abort();
header_remove('Set-Cookie'); // 移除 Set-Cookie 头
ログイン後にコピー

拡張:

対応するセッション ファイルは session_start() の後にロックされ、現在のセッションが終了するまでロックは解除されません。脚本 。

ロック期間中にプロセスが同じセッション ID にアクセスした場合、ファイルのロックが解除されるまで session_start() は開始されません。

session_start();                               //starts the session,独占对应session id的文件
$_SESSION['user']="Me";               将变量写入对应的session 文件
session_write_close();                   // close write capability   ,关闭对文件 的 写独占
echo $_SESSION['user'];              // you can still access it  ,依然可以对文件进行 写操作
ログイン後にコピー

session.cookie_lifetime のデフォルトは 0 です。これは、ブラウザを閉じると cookie が無効になることを意味します。

cookie_lifetime は、php.ini で設定するだけでなく、 function session_set_cookie_params.

session.gc_maxlifetime デフォルトは 1440 秒です。つまり、2 つのユーザー要求間の時間間隔が 1440 秒を超える場合、

サーバー側のセッション ファイルが処理されます。 PHP によってガベージとして認識される場合、 gc_probability/gc_divisor が 1 に等しい場合、セッション ファイルは削除されてリサイクルされます。

セッション Cookie とセッション ファイルを 86400 秒 (1 日) 後に期限切れになるように設定します:

session.cookie_lifetime=86400
session.gc_maxlifetime=86400
session.gc_probability=1
session.gc_divisor=1
ログイン後にコピー

推奨される学習: 「PHP ビデオ チュートリアル >>

以上が古い PHP のバグ: 重複した Set-Cookie ヘッダーを受信しましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yurunsoft.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート