0

セッションデータをデータベースに保存しています。クラスSessionには、データの保存と取得に使用されるストレージ関数があります。

今私の質問は次のとおりです。

デフォルトが「files」に設定されているため、ランタイム構成でsession.save_handlerの値を変更する必要がありますか、それとも関数session_set_save_handlerがそれをオーバーライド(無視)しますか?

そして、session.auto_startが有効になっている場合、どのハンドラーが使用されますか?

これが私のクラスセッションの最小化されたバージョンです:

class Session
{

public function __construct($registry, $sessionhash = '', $userid = 0, $password = '')
{
    $this->config = cl_Config::instance();
    $this->db = cl_Database::instance($this->config);
    $this->hasher = cl_Hasher::instance();

    // Register this object as the session handler
    session_set_save_handler( 
        array( $this, "open" ), 
        array( $this, "close" ),
        array( $this, "read" ),
        array( $this, "write"),
        array( $this, "destroy"),
        array( $this, "gc" )
    );

function open( $save_path, $session_name )
{
    ...
    return true;
}

function close( $save_path, $session_name )
{
    ...
    return true;
}

function read( $id )
{
    ...
}

function write( $id, $data )
{
    ...
    return true;
}
...
4

1 に答える 1

1

session.save_handlerいいえ、を呼び出す場合は設定しませんsession_set_save_handler()auto_start、デフォルトで構成されたものが起動し(組み込みまたはモジュールによって提供されます)、ユーザーが提供したものではありません。自動開始について:それは良い考えのように思えるかもしれませんが、セッションを開くと、セッションが終了するまで、セッションを開始する他のすべてのリクエストがブロックされることに注意してください。したがって、セッションは必要なときにのみ開始するのが最適です。

于 2013-03-14T00:44:37.097 に答える