2

Kohana の Session クラスを問題なく使用していますが、今は特別な状況に直面しています。私のスクリプトでは、どこかで呼び出しているベンダー クラスをロードする必要がありますsession_start

コードの後半で、Session::instance() を呼び出す必要がありますが、これによりError reading session data.例外が発生します。

ベンダー コードを変更することはできません (具体的には、facebook php sdk であり、変更したくありません) Session::instance()。後で呼び出す必要があります。

この状況を解決する方法は?

知っておく必要があるのは、単純なことです

<?php
session_start();
Session::instance();
?>

同じ例外が発生します。これは Kohana 3.2 のバグだと思いますが、何らかの方法でだます必要があります。

Sessionクラスの詳細については、こちらをご覧ください: http://kohanaframework.org/3.2/guide/api/Session

ところで、私はデフォルトのネイティブ セッション クラスを使用しています。

4

3 に答える 3

5

Alex Mihai が指摘したように、Session::instance() でセッション id パラメータを使用して再起動できます。

発生する例外は、セッションがまだ実行中であり、実行中のセッションを復元できないことです。そのため、最初に閉じる必要があります。

これを試して:

// Start session
session_start();    

// Store session id and close the session
$sessionId = session_id();
session_write_close();

// Then we can restore the session by using the session id 
// and the Session class from Kohana
Session::Instance(Session::$default, $sessionId);

また、最もエレガントなソリューションではないかもしれませんが、これは私にとってはうまくいきました。

于 2012-12-12T15:35:13.987 に答える
1

Kahana doc は、Session::instance() について言及しています。

一部のセッション タイプ (ネイティブ、データベース) では、セッション ID を 2 番目のパラメーターとして渡すことで、セッションの再開もサポートされます。

たぶん、2 番目のパラメーターとして session_id() から Session::instance() へのパッションを試すことができます。

于 2012-12-12T09:42:35.520 に答える
0

これが私が使い始めた解決策ですが、他の人からより良い解決策が得られる可能性があるため、今はこの回答を受け入れません。

したがって、Sessionクラスのソース コードを変更せずにこの種の例外を回避するには、セッションが常にSessionクラスから開始されるようにする必要があります。私の場合は、ベンダー クラスを呼び出すSession::instance()前に ,を呼び出すだけです。require最もエレガントではないかもしれませんが、うまくいきます。もっと良いアイデアがあれば、解決策を教えてください(そう願っています)私はすべて耳にしています:)

于 2012-12-12T09:53:09.877 に答える