web-dev-qa-db-ja.com

セッション変数に制限はありますか?

タイトルにあるように、セッション変数には制限がありますか(存在する場合)、または通常変数と見なされ、同じ量のデータを保存できますか?

最大長、最大値など、変数タイプの制限以外に他の制限があるかどうかを探しています。

追伸質問が不明な場合は、お知らせください。

前もって感謝します!

54
jolt

@Thariamaが言ったように、変数の数に制限はありません。また、セッションに保存できるデータの量に制限はありません(サイズが数十MBのセッションを見てきました)。

セッションのサイズが大きくなると、次のようなさまざまな動作が発生します。PHP 5は、セッション全体をsession_start()でメモリにデシリアライズします(デフォルトのセッションハンドラを使用します- もちろん、独自のソリューションを作成する 、20 MBのセッションと50の同時ユーザーを使用すると、スクリプトはディスクアクセス速度によって厳しく制限され始めます(別名「スクリプトの起動は糖蜜のように遅い」)-セッションだけで1 GBのRAMを占有します);最後に、可能な限り多くのセッションをRAMに保持するためのボックスを専用にし、フロントエンドボックスがNFSを介してそれらにアクセスしました(これはこのケースでは役立ちましたが、あなたのためにやり過ぎ)。

多くの同時ユーザーとディスク上のセッションストレージでは、セッション一時ファイルの数がファイルシステムの制限で問題を引き起こす可能性があることに注意してください(たとえば、stat()で問題が発生する前に1つのディレクトリに存在できるファイルの数 パフォーマンス )、またはその他の制限(一度に4096個のオープンファイルのみを許可するようにボックスが設定されるという難しい方法を見つけました)。これは実際にはセッション固有ではありませんが、セッション処理によってトリガーできます。

53
Piskvor

いいえ、セッションが保持できるスペースに制限はありません(またはセッションが保持できる変数の数)。唯一の制限は、コンピューターの仕様です。これは、php.iniで使用可能なmemory_limitによって定義されます。このスペースは、すべてのユーザーのすべてのセッションで共有されることに注意してください。

15
Thariama

これはWebサーバーに完全に固有のものです。 Apacheについては、次をご覧ください。

http://httpd.Apache.org/docs/trunk/mod/mod_session.html

さらにmod_session_dbd を使用して、セッションをデータベースに保存できます。したがって、セッションごとに1つのファイルなどの物理的な制限を克服できます。さらに、Apacheは、スケーラビリティのために特定のサーバーまたはサーバーのグループに保存されているユーザーごとのセッションを追跡するように構成できます。

8
shamittomar

簡単な答えはノーです。 (つまり、他のPHP変数が...メモリに収まらなければならないなど)ほど制限はありません。)

ただし、_$_SESSION_データはどこかに、デフォルトではセッションごとに1つのファイルのシリアル化されたデータとして保存されることに注意してください。そのため、実際的な制限があります。それらはsession_start()を使用するすべてのページでデータストアからロード/保存されるため、膨大な量の情報をそれらに保存したくないでしょう。

3
Matthew