2017-01-27 10 views
1

通常、セッションはセッションを開始/終了するたびにsession_encodesession_decodeでデコードされます。なぜlaravelはセッションエンコード/デコードの代わりにセッションデータをシリアライズするのですか?

私はセッションのエンコード/デコードは、シリアライズとは少し違っていて、私が見たものとは異なる結果を生み出していることを知っています。 Laravelは代わりにやってのセッションデータのためserializeunserializeで行くことを選択した理由

私は疑問に思って:

session_encode() 
session_decode($data) 

をネイティブセッションエンコード/デコーダを使用していないことの利点は何ですか?

これが行われているの例は、ここで見つけることができます:

https://github.com/illuminate/session/blob/master/Store.php#L128

答えて

1

session_encode()は、グローバル$_SESSIONをシリアル化します。だからserialize($_SESSION)はほとんど同じです。

docs: デフォルトでは、使用されるシリアル化メソッドはPHP内部であり、serialize()と同じではありません。 serialize($value)あなたがシリアライズしたいものを自分で決めることができ、laravelは、それ自身のセッションの実装を使用しているため、彼らはserializeメソッドを使用するように強制されていると

http://php.net/manual/en/function.session-encode.php

json_*

Laravelはsession_start方法と使用していないことはできませんが、彼らはserializeを考慮してデータ型を取り、データがオブジェクトに非直列化することができ、より高速であるが、他のいくつかの欠点がありjson_encodeメソッドを使用することができることに注意してください$_SESSIONグローバルは利用できません。

基本的に、セッション用のPHP実装は、PHP実装のいくつかの欠点のために、laravelによって省略されています。 custom/laravelの実装はより柔軟です。 laravelソースから

// If a session driver has been configured, we will need to start the session here 
    // so that the data is ready for an application. Note that the Laravel sessions 
    // do not make use of PHP "native" sessions in any way since they are crappy. 

https://github.com/laravel/framework/blob/7212b1e9620c36bf806e444f6931cf5f379c68ff/src/Illuminate/Session/Middleware/StartSession.php#L53

なぜPHPのネイティブのセッションが安っぽいですか。

私はネイティブPHPセッションの主な問題は、例外などをスローすることができないことだと思います。これにより、デバッグやスタックトレースの維持が難しくなります。独自のセッション・マネージャを実装することにより、セッションがいつ、どこで格納/クローズされ、独自のアプリケーション・フローを維持するかをより詳細に制御できます。

警告PHP 5.0.5以降、オブジェクト の後に書き込みハンドラとクローズハンドラが呼び出され、オブジェクトを使用したり例外をスローすることはできません。 キャッチされないので例外がキャッチされることも、 例外トレースは表示されず、実行は予期せず終了します。 ただし、オブジェクトデストラクタはセッションを使用できます。

また、この時点でハンドラセッションの保存などのオブジェクトを使用する場合、それは仕方のPHPから予期せぬ 副作用を避けるために、PHPでシャットダウン機能を登録すること 重要である

警告問題がある可能性がありますシャットダウン時にオブジェクトが内部的に破棄され、書き込みおよびクローズが呼び出されないことがあります。通常、 は register_shutdown_function()関数を使用して 'session_write_close'を登録する必要があります。

+1

「だからこそ!」というフレーズに注意してください! – Paras

+1

これらの欠点はどういったものですか?これに関する読書資料はありますか?知りたいですか?お返事をありがとうございます。 –

関連する問題