今日、プロジェクトに取り組んでいるときに問題が発生しました。過去に何かを作成するときは、クロスドメインの問題を解決できるように、セッションは通常データベースに直接保存されていました
サブドメイン間だけでなく、今日私が遭遇した問題は、他の人の既存のものに変更を加えなければならないということでした。ただのサブドメインなので
その時は、簡単な解決策があったはずです。
セッションは主に2つのパートに分かれています:
1 つはセッション データで、デフォルトでサーバーの tmp ファイルに保存され、ファイルの形式で存在します
もう 1 つは、セッション データをマークするセッション ID です。セッション ID は、セッション ファイルのファイル名であり、ランダムに生成されるため、セッションの一意性とランダム性が保証されます。通常、セッションのライフサイクルが設定されていない場合、セッション ID はブラウザを閉じた後、自動的にログアウトされ、新しいセッション ID が登録されます。クライアントが Cookie を無効にしない場合、Cookie はセッション セッションの開始時にセッション ID とセッションの有効期間を保存する役割を果たします。
異なるドメイン名を持つ 2 つの Web サイトが同じセッションを使用したいと考えていますが、これにはセッションのクロスドメインの問題が伴います。
デフォルトでは、各サーバーは同じクライアントに対して SESSION ID を生成します。たとえば、同じユーザー ブラウザの場合、サーバー A によって生成される SESSION ID は 11111111111 ですが、サーバー B によって生成される SESSION ID は 222222 です。また、PHP の SESSION データは、このサーバーのファイル システムに別途保存されます。 SESSION データを共有したい場合は、次の 2 つの目標を達成する必要があります:
1 つは、同じクライアントに対して各サーバーによって生成される SESSION ID は同じである必要があり、同じ COOKIE を介して渡すことができるということです。つまり、各サーバーは PHPSESSID という名前の同じ COOKIE を読み取ることができなければなりません。もう 1 つは、その保存方法です。 SESSION データ / の場所はすべてのサーバーにアクセスできる必要があります。簡単に言うと、これら 2 つの目標は、複数のサーバー (A サーバーと B サーバー) がクライアントの SESSION ID を共有し、サーバーの SESSION データも共有する必要があることです。
解決策は 3 つあります:
1. PHP ページの最初 (出力の前、session_start() の前) で次の設定を行うだけです
ini_set('session.cookie_path', '/');
ini_set('session.cookie_domain', '.mydomain.com');
ini_set('session.cookie_lifetime', '1800');
2.php.iniに設定する
session.cookie_path = /
session.cookie_domain = .mydomain.com
session.cookie_lifetime = 1800
3. PHPページの先頭で関数を呼び出す(1と同じ条件)
session_set_cookie_params(1800, '/', '.mydomain.com');
私の解決策は、入り口に次のコードを追加することです:
ini_set('session.cookie_path', '/');
ini_set('session.cookie_domain', '.domain.com'); //domain.com を独自のドメイン名に置き換えます
ini_set('session.cookie_lifetime', '1800');
写真に示すように:
サイト1
サイト 2
2 つのサイトの PHPSESSID が同じであることがわかります。これにより、クロスサブドメイン名の問題はもちろん解決されます