ホームページ >バックエンド開発 >PHPの問題 >PHPジャンプでのセッション損失の問題を解決する方法

PHPジャンプでのセッション損失の問題を解決する方法

藏色散人
藏色散人オリジナル
2021-09-14 09:18:064053ブラウズ

PHP ジャンプでセッションが失われた場合の解決策: 1. 対応するファイルをメモ帳で開きます; 2. BOM 形式なしで UTF-8 でエンコードする形式を選択します; 3. ファイルを保存し、サーバーです。

PHPジャンプでのセッション損失の問題を解決する方法

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

問題の解決方法PHPジャンプセッションの損失?

php ページジャンプ時のセッション損失メカニズム

1. 同じページ上でセッション値の保存と取得は可能ですが、取得はできません別のページをまたいだ後;

2. 2 つのページで session_start() を開始する前に session_id("myid") が設定されていましたが、値が取得できませんでした。

を使用した後、デフォルトでセッションが保存されるディレクトリが存在しないことを確認します

PHPジャンプでのセッション損失の問題を解決する方法

# # 理由 2


thinkphp が開発したプロジェクトで、ログインに成功するとログインページに飛び、情報を送信するとセッション出力は正常で問題ありませんが、ページが飛んだ後、セッションが表示されるロスト現象が発生し、正常にログインできなくなります。

情報を検索した結果、それが bom の原因であることがわかりました。 COOKIE 送信メカニズムの制限により、ファイルの先頭に BOM がすでに存在するファイルでは、COOKIE を送信できません (COOKIE が送信される前に PHP がファイル ヘッダーを送信しているため)。関数が無効です。 COOKIE および SESSION に依存する関数はすべて無効です。

これに対処する正しい方法は、一部のファイルの BOM を削除することです。一般に、BOM の問題はエントリ ファイルで発生します。私がこれに対処する方法は、メモ帳を使用してファイルを開き、形式は UTF-8 BOM フリー形式でエンコードされているため、保存してサーバーに再アップロードします。ただし、BOM を削除してサーバーにアップロードする前に、サーバー上のソース ファイルを削除する必要があることに注意してください。上書きアップロードでは BOM は削除できません。

セッション メカニズム

session はサーバー側のセッション メカニズムです。クライアントがサーバーにセッションの作成をリクエストすると、サーバーはまずリクエストに次の内容が含まれているかどうかを検出します。一意の sessionID。はいの場合、サーバーはすでにユーザーのセッションを作成していることを意味します。ユーザーが使用するセッション ID に従ってユーザーのセッションが取得されている限り、sessionID がない場合、サーバーはセッション ID を作成します。一意の sessionID を持つユーザーの新しいセッション。作成が完了すると、セッション ID はサーバーからクライアントに返され、クライアントのローカルに保存されます。

通常、セッション ID を保存する仕組みは Cookie ですが、Cookie は人為的に禁止することもできるため、その後も、通常は http://..../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 の形式で URL を書き換えることにより、セッションを介してセッションを実行できます。 、もう 1 つは、URL に添付されたクエリ文字列として使用されます。後で、式は http://..../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 です。ユーザーにとって、これら 2 つの方法に違いはありません。サーバーが解析中に異なる方法で処理することを示します。最初の方法が使用されます。この方法は、セッション ID 情報を通常のプログラム パラメーターと区別するのにも役立ちます。

対話プロセス全体を通じて状態を維持するには、クライアントが要求する可能性のある各パスの最後にこのセッション ID を含める必要があります。

セッション無効化に関するもう 1 つの誤解:

セッションの仕組みについて話しているとき、「ブラウザを閉じればセッションは消えるのではないか」という誤解をよく聞きます。実際、会員カードの例を想像していただければわかると思いますが、お客様が積極的にお店にカードの解約を申し出ない限り、お店は簡単にお客様の情報を削除することはありません。セッションについても同様で、プログラムがサーバーにセッションの削除を通知しない限り、サーバーはセッションを保持します。通常、プログラムはユーザーがログオフするときにセッションを削除する指示を送信します。ただし、ブラウザは閉じる前にサーバーに、閉じようとしていることを積極的に通知することはないため、サーバーはブラウザが閉じられたことを知る機会がありません。この錯覚の理由は、ほとんどのセッション メカニズムがセッション ID を保存するためにセッション Cookie を使用するためです。 . となり、ブラウザを閉じるとセッション ID が消え、再度サーバーに接続すると元のセッションが見つかりません。サーバーによって設定された Cookie がハードディスクに保存されている場合、またはブラウザーによって送信された HTTP リクエスト ヘッダーを書き換えて元のセッション ID をサーバーに送信する何らかの方法が使用されている場合、ブラウザーが起動したときに元のセッションを見つけることができます。再び開きました。

ブラウザを閉じてもセッションは削除されず、サーバーはセッションの有効期限を設定する必要があるためです。クライアントが最後にセッションを使用してからの時間この有効期限を超えると、サーバーはクライアントがアクティビティを停止したと判断し、ストレージ領域を節約するためにセッションを削除します。

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPジャンプでのセッション損失の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。