2011-07-26 14 views
1

このトピックに関する矛盾する情報を読んだので、私が提示したシナリオで1つの計画が別の計画よりも理想的になることを期待しています。PHPセッションとDB参照の比較

私の場合、「セクション」で構成される「グループ」にアクセスできる「ユーザー」があります。各セクションは、ユーザーの構成方法に基づいて異なる権限レベルを持つことができます。だから、私の同僚は「基本」であるが、私はセクションの「管理者」になるかもしれない。

ログイン後、ユーザーは管理/表示するグループを選択します。私の当初の計画は、彼らはページに行くときその後、私は彼らがしているものをグループまで見ることができる...

$_SESSION[group_id][sectioin_id]['permission'] = 7; // 1+2+4 (R+W+X) 

のようなセッションでは、アレイ内のユーザー/グループ/セクション/ permisison情報や店舗を検索することでしたどのセクションのページが表示されているかを確認し、そのパーミッションに基づいて適切な情報を表示します。

また、DBルックアップスクリプトを作成してこの情報を確認することもできますが、複数の結合テーブルを検索して各ページの結果を解析する必要があります。これは私にとっては非効率的だと思われますが、各ページのセッションの書き方について私が読んでいるところからそうではないかもしれません。

ご意見/ご提案ありがとうございます。可能なセッションサイズ

// ----詳細は今のグループは、データの最大3つの作品で、5つのセクションの最大を持っています。セッションの最大サイズは現在のようになります。

$_SESSION[1][1]['permission'] = 7; 
$_SESSION[1][1]['type'] = 'paid'; 
$_SESSION[1][1]['expires'] = '2011-08-01'; 
$_SESSION[1][2]['permission'] = 7; 
$_SESSION[1][2]['type'] = 'free'; 
$_SESSION[1][3]['permission'] = 7; 
$_SESSION[1][3]['type'] = 'paid'; 
$_SESSION[1][3]['expires'] = '2011-08-01'; 
$_SESSION[1][4]['permission'] = 7; 
$_SESSION[1][4]['type'] = 'paid'; 
$_SESSION[1][4]['expires'] = '2011-08-01'; 
$_SESSION[1][5]['permission'] = 7; 
$_SESSION[1][5]['type'] = 'free'; 

このセクションの1,3,4が支払わレベルであり、2,5は無料版である場合です。 ログインごとに追跡するセッションが多すぎますか?

+7

7 == 1 + 2 + 3 ??;) – PeeHaa

+1

考慮すべき1つのこと。アクセス権がセッションに格納されている場合、アクセス権の変更は即時に行われません。ユーザは新しいアクセス権を得るために 'ログアウト'して再度ログインする必要があります –

+0

@PeeHaa:7は111バイナリ(Rビット、Wビット、Xビット) – reinierpost

答えて

0

私はそれをかなり醜いハックと呼んでいます。あなたがしようとしているのは、大きなオブジェクトを構築して、PHPインタプリタの複数回の実行でそれを保持することです。オブジェクトをセッションデータに忍び込ませることは賢明ですが、それを行う「間違った」方法です。

新しいユーザーセッションごとに、完全なアクセス許可テーブルのセットが格納されており、同じデータを何度も複製していることに注意してください。

IMOあなたはログイン時に高価なヒットヒットを取るべきです(とにかくやりたいことは他にはありません)。そして、$ _SESSION ["permission"] = 7のようなセッションでユーザの許可マスクを保持してください

複数の相互作用にアクセス許可プロバイダを本当に保存する場合は、オブジェクトのシリアル化を調べてください。 $ _SESSIONを乱用することなくデータベースにオブジェクトを格納することができます。

+0

私が正しく従っているなら、あなたは特定の "セクション"レベルの許可を読み込むことを提案し、ユーザーが別のセクションに切り替えると新しい権限レベルでロードするには、DBを押しますか? – Don

+0

@Donああ、今あなたは何をしようとしているのか分かります。私は$ _SESSIONにすべてのパーミッションテーブルを格納していると思ったので、毎回データベースでそれを探す必要はありませんが、複数のページにわたってそのユーザのパーミッションを保存するだけです。私はすべての可能なグループ/セクションの組み合わせのために大規模な配列を持っていることをためらうだろう。おそらくデフォルトのユーザーレベルを持ち、標準から外れている場合にのみアクセス許可を格納しますか? –

+0

はい、ユーザーのアクセスだけで、サイト全体ではありません。ほとんどの場合、グループレベルを保存するので、今すぐグループには5つのセクションがあります。各セクションには、セクションが「有料」または「フリー」レベルで実行されているかどうか、およびオプションで有効期限が設定されているかどうかのパーミッションレベルが格納されているため、最大値は5x3レベルになります... – Don

0

どちらの方法でも機能します。注意事項:

  • システムへのアクセスの重要性はどれですか?あなたがセッションのアプローチに進み、ユーザーが無効になったりアクセス許可が削除されたりすると、次回のログインまでアクセス権が維持されます。
  • セッションデータのサイズは制限されている必要があります。あなたが百万のグループ/セクション/パーミッションを持っているなら、あなたのセッションデータはかなり大きく処理が遅くなります。
+0

これは、新しいユーザーを追加する際のアカウント設定の機能です。グループとセクションに弟を追加すると、彼のアクセスを指定します。私はあなたが何を言っているかを見ます。彼がログインしている間に自分の特権を低レベルに落とすと、彼は次のログインまで高レベルにとどまります...セッションが作成された時と設定された間隔強制よりも古い場合のタイムスタンプを追加できますリロードもありますが、それは醜いの上に醜いかもしれません... – Don

関連する問題