11

統合しようとしている 2 つのアプリがあります。1 つは私が作成したもので、もう 1 つは私が使用している CMS です。私の認証は私がコーディングしたもので行われ、私の CMS にその情報を知らせたいと思っています。問題は、CMS が 1 つのセッション名を使用し、私のアプリが別のセッション名を使用することです。名前空間が競合する可能性があるため、同じものを使用したくありませんが、それでもこの情報を取得したいと思います。

リクエストの途中でセッション名を切り替えることはできますか? たとえば、CMS で次のようなことを行います。

//session_start already called by cms by here

$oldSession = session_name();
session_name("SESSION_NAME_OF_MY_APP");
session_start();

//get values needed
session_name($oldSession);
session_start();

このようなものは機能しますか?session_start() が呼び出された後にこのようなものが機能する場合、ドキュメントやWebで何も見つかりません。チップ?

この解決策をむき出しにして、情報を取得するための Web サービスを開発することだけを考えていましたが、その情報は既に利用可能であるため、明らかにセッションから取得する方が望ましいでしょう。

ありがとう!

4

7 に答える 7

5

セッションを切り替える方法の実例を次に示します。

session_id('my1session');
session_start();
echo ini_get('session.name').'<br>';
echo '------------------------<br>';
$_SESSION['value'] = 'Hello world!';
echo session_id().'<br>';
echo $_SESSION['value'].'<br>';
session_write_close();
session_id('my2session');
session_start();
$_SESSION['value'] = 'Buy world!';
echo '------------------------<br>';
echo session_id().'<br>';
echo $_SESSION['value'].'<br>';
session_write_close();
session_id('my1session');
session_start();
echo '------------------------<br>';
echo $_SESSION['value'];

ログは次のようになります。


PHPSESSID
------------------------
my1session
Hello world!
------------------------
my2session
Buy world!
------------------------
Hello world!

したがって、ご覧のとおり、セッション変数は、セッションの変更中に保存および復元されました。

于 2010-10-25T09:05:19.107 に答える
3

注: 以下の回答は正しくありません。使用したり投票したりしないでください。議論の場としてここに残しました

あなたの解決策はうまくいくはずです(私がそのようなことを試したことはありsession_name()ません)。

次のようなことを試すことができます:

session_write_close();
$oldsession = session_name("MY_OTHER_APP_SESSION");
session_start();

$varIneed = $_SESSION['var-I-need'];
session_write_close();
session_name($oldsession);
session_start;

PHP セッション ID 操作ルーチンまたは手動の Cookie マングリングを使用して、実際にセッション ID 値をいじる必要はありません。PHP 自体がすべての処理を行います。

于 2009-03-04T09:24:26.887 に答える
2

私はこれを完成させるために取り組んできましたが、ここに私が思いついたものがあります。子アプリでセッション名を使用して親セッションに切り替えてから、子アプリのセッションに戻ります。親セッションが存在しない場合、ソリューションはそれを作成します。

$current_session_id = session_id();
$current_session_name = session_name();

session_write_close();

$parent_session_name = 'NameOfParentSession';

// Does parent session exist?   
if (isset($_COOKIE[$parent_session_name])) {

    session_id($_COOKIE[$parent_session_name]);
    session_name($parent_session_name);
    session_start();

} else {
    session_name($parent_session_name);
    session_start();

    $success = session_regenerate_id(true);
}

$parent_session_id = session_id();

// Do some stuff with the parent $_SESSION 

// Switch back to app's session
session_write_close();
session_id($current_session_id);
session_name($current_session_name);
session_start();
于 2014-06-10T01:11:44.250 に答える
1

session_regenerate _id()

マニュアルはこれをかなりよく説明していますが、マニュアルの例を次に示します

session_start();

$old_sessionid = session_id();

session_regenerate_id();

$new_sessionid = session_id();

echo "Old Session: $old_sessionid<br />";
echo "New Session: $new_sessionid<br />";

print_r($_SESSION);
于 2009-03-04T09:15:00.450 に答える
0

session_idを使用する必要があります。これを使用して、セッション ID (または名前) を設定/取得できます。

したがって、(疑似コードで) session_name を使用する代わりに、session_id を使用します。

于 2009-03-04T08:56:49.027 に答える
0

Zend_Sessionは、セッションの名前空間を提供します。

Zend_Session_Namespace インスタンスは、$_SESSION の名前空間スライスのアクセサ オブジェクトです。Zend_Session コンポーネントは、既存の PHP ext/session を管理および管理インターフェイスでラップし、Zend_Session_Namespace の API を提供してセッションの名前空間を永続化します。Zend_Session_Namespace は、PHP の標準セッション メカニズム内に永続化された名前空間を操作するための、標準化されたオブジェクト指向のインターフェイスを提供します。匿名および認証済み (「ログイン」など) セッション名前空間の両方がサポートされています。

于 2009-03-04T09:16:26.780 に答える
0

可能です。しかし、自分でセッションを処理する必要があると思います:

session_name('foo');
// start first session
session_start();

// …

// close first session
session_write_close();

session_name('bar');
// obtain session id for the second session
if (ini_get('session.use_cookies') && isset($_COOKIE[session_name()])) {
    session_id($_COOKIE[session_naem()]);
} else if (ini_get('session.use_trans_sid') && !ini_get('session.use_only_cookies') && isset($_REQUEST[session_name()])) {
    session_id($_REQUEST[session_naem()]);
}
// start second session
session_start();

// …

ただし、Cookie の設定など、他のセッション処理も行う場合があることに注意してください。この場合もPHPがこれを行うかどうかはわかりません。

于 2009-03-04T09:18:22.440 に答える