5

異なるセッション (デフォルト) を持つ複数のサブページを持つ 1 つのドメイン (domain.com) があり、それらのサブページのいくつかでセッションを共有したいと考えています。

たとえば、私はdomain.com/section1/staff/とを持っていdomain.com/section2/staff/ます。変数を使用して、現在ログインしているユーザーに関する情報を保存しています。一度ログインして、にアクセスしてもログインしたままに$_SESSIONしたいと考えています。section1/staff/section2/staff/

他の投稿を読むと、これがセッションが機能するデフォルトの方法であり、両方のページでドメインが設定されておらず、パスが「/」であるように見えるため、同じセッションである必要がありますが、変数をsession_get_cookie_params()共有していません。私はそれが他のセッションを破壊しない$_SESSIONと呼びます。session_destroy()

session_get_cookie_params()同じものを使用するように明示的に設定する方法はありますか (または、配列に表示されないデフォルト設定を探す別の場所)?

4

3 に答える 3

4

デフォルトでは、PHPは同じドメイン上のすべてのスクリプトに同じセッションを使用します。domain.comとwww.domain.comは同じセッションを持っていない可能性があるため、これらの間のバウンスに注意してください。

セクションごとに完全に個別のセッションを作成する代わりに、ユーザーとセクションごとに単一のグローバルセッションを使用してみませんか?$_SESSIONを多次元配列にできない理由はありません。

//// things needed in multiple sections could go into a common grouping:
$_SESSION['common']['user'] = 'josh';
$_SESSION['common']['privileges']['section_access'] = array( 'section1'=>"yes", 'section2'=>"no", 'section5'=>"security-prompt" );

//// while things that were section specific could be grouped by section:
$_SESSION['section1']['agreed_to_terms'] = true;

//// you could also group by logical functionality:
$_SESSION['staff']['badge_no'] = 44815;

この種の構造を使用すると、各スクリプトですべての情報を利用できますが、必要な部分のみを使用します。

また、これにより、session_name()やその他のトリッキーなビットをロジックでジャグリングするという頭痛の種を減らすことができます。さらに、これにより、セッション間で一部の情報(現在のユーザーなど)を共有する方法の問題が解決されます。

于 2012-08-01T02:48:01.123 に答える
0

問題は、一方のセクションがURLをdomain.comに強制し、もう一方のセクションがURLをwww.domain.comに強制することでした。

于 2012-07-31T22:00:39.507 に答える
0

対処するときの通常の提案は、 session_start();$_SESSIONを確認することです。すべての PHP スクリプトの先頭で、何よりも先に呼び出されます。

例:

<?php // file1.php

session_start();

// other stuff...

$_SESSION['user'] = 'josh';

?>

<?php // file2.php

session_start();

// other stuff...

echo $_SESSION['user']; // should print "josh"

?>
于 2012-07-31T21:45:36.733 に答える