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'を登録する必要があります。
「だからこそ!」というフレーズに注意してください! – Paras
これらの欠点はどういったものですか?これに関する読書資料はありますか?知りたいですか?お返事をありがとうございます。 –