2016-04-11 24 views
4

私は、ログに記録されたユーザーのプロファイルに従ってメニューのリストを作成する必要があるプロジェクトに取り組んでいます。しかし、現在、ページがロードされるたびにこのリストを作成しなければならず、これは私のプロジェクトにはあまり適していません。セッションの代わりに何を使うべきですか?

私がしたいことは、ユーザーがログインして必要なときに毎回このリストを使用する場合のみです。私のアイデアは、ユーザーがログインするときにこのリストをSessionに保存することです。しかし、セッションは良い方法ではありません。

ActionResultにセッション、Cookie、OutputCacheを使用しようとしましたが、セッションのみが機能します。

私のリストを "グローバル変数"などに格納して、それをいつも必要なものにする方法はありますか?

+0

「Session」とまったく同じです。 – SLaks

+6

セッションの使用は必ずしもすべての場合で間違っているとは限りませんが、誤用される可能性があります。この状況は、セッションが本当に意図しているように聞こえるので、それを使用してください。 – DLeh

+0

クッキーを使用することもできます...メニューが変更された場合、クッキーを破棄して再作成します。 – JonH

答えて

1

ユーザーIDによって参照されるプロファイルが作成/変更されると(JSON文字列のような単純なものかもしれません)、ビルドされたリストを格納するデータベースを作成します。

単純に1つのユーザーID値でこれを選択すると、単純なデータ型で複雑なデータ型を取得できます。

+0

私はすでにメニューを保存するテーブルを作成しました。しかし、現在それぞれのリクエストはデータベース(SQL Server)からこのメニューを取得する必要があり、これは私がそれをしたくないものです。 –

+0

申し訳ありませんが、ログイン時に再度ビルドし、そのログインセッション用のページを提供しています。だからSESSIONはまさにあなたが使用すべきものです。 – Datadimension

2

私はあなたのために2つのオプションを提案できます。

  1. 各ユーザーにセッションオブジェクトを使用します。 または
  2. キャッシュメカニズムを使用する - アプリケーションにキャッシュメカニズムを実装している場合、ナビゲーションメニュー(Redis、AppFabric、.NETキャッシングのようなもの)を格納する1人のユーザーあたり1つのオブジェクトを作成できます。

メニューに関連するオブジェクトは、ユーザーのために1回のみ作成する必要があります(ログイン時に作成することができます)。

0

ありがとうございました。

私の問題を解決するために、私はセッションを使用しなければなりませんでした。どうして?各ユーザーには、すべての特定のメニュー、名前、ID、アバターを含む独自の(サイドバービューモデル)セッション["サイドバー"]があります。

"OutputCache"(自分の属性クラス)を使用しようとしましたが、私のメニューはChildActionなので、ログオフ時にキャッシュをクリアできませんでした。彼がしたい時アバター私はまた、アプリケーションを使用しようとしましたが、ほぼセッションの場合と同じでした。

PS:私はセッションが嫌いですが、今はこれが最善の方法だと思います。

関連する問題