- PR -

HttpContext.Current.Cacheについて

投稿者投稿内容
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2009-02-17 13:59
いつも参考にさせていただいてます。

Asp.netでWebの開発をしています。
ユーザー個別のデータを保持するのにCacheを使用しています。異なるページ間でこのデータを使用します。

下記のようにしました。

HttpContext.Current.Cache.Insert(key, val, Nothing, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration)

これはサーバ上で共有されてしまうのでしょうか?
このデータはユーザ毎に異なります。

ユーザ1がアクセスすると正しいデータがCacheに入っています。
ユーザ2がアクセスすると本来表示されるはずのデータではなくユーザ1のデータが表示されてしまいます。

初歩的で申し訳ないのですが、このCacheはユーザ毎に個別に持てるのではないのでしょうか?ユーザ毎にキーを変えないといけないのでしょうか?

どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2009-02-17 14:17
http://msdn.microsoft.com/ja-jp/library/system.web.caching.cache.aspx
> このクラスのインスタンスは、アプリケーション ドメインごとに 1 つずつ作成されます。

ということでWebアプリケーション単位で保持されるはずです。
ユーザ単位のデータはSessionで持つのが普通ですが、Cacheを使いたいのはなぜでしょう?

けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2009-02-17 14:43
>どっとねっとふぁん様

ありがとうございます。

最初Sessionで持っていたのですが、同じ現象(データが上書きされてしまう??)なのでCacheに変えてみたのですが同じでした。
データ保持の知識がまだまだです。
http://msdn.microsoft.com/ja-jp/library/hdxfb6cy.aspx
このへんも調べていろいろ変更していたのですが、どうもうまく動作しません。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2009-02-17 15:11
Sessionであれば基本的にユーザが異なれば上書きされたりしないはずです。
ちなみに、そのSessionを利用した場合って、テストはどのように行いました?
もしかして一台のマシンからブラウザを2つ起動してテストしてたりしませんか?

その場合、ブラウザの設定によっては、同一のセッションIDが使われます。
IEだと、デフォルトがそういう設定になっていたはずです。

Sessionが上書きされる、ということで考えつくのはこのあたりですね。
あとは問題があるとすればプログラムの書き方かな。
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2009-02-17 15:33
どっとねっとふぁん様
ありがとうございます。

テストはリモートデスクトップから別のユーザとしてブラウザを立ち上げ実行(ユーザ1)
ローカルから自分のアカウントで実行(ユーザ2)
なんです。

どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2009-02-17 15:46
となると、あとはほんとにプログラムの書き方じゃないか、という気がしますが。
設定とかで問題になる場合あったかなぁ。。。

一般に個人毎のデータ管理にあhSessionがつかわれていて、問題もでていないものなので、問題がでるあなたの状況が特殊だと思います。
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2009-02-17 15:52
うーん、そうですか。
そういえば記述しているJavascriptあたりがあやしいかも!
もっと調査してみます。
ありがとうございます。
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2009-02-17 16:24
こんにちわ

ふと思い当たったのですが、
URLにセッション文字列はいってたりしませんか?

その場合、URLをコピペすると、見事に同一セッションでアクセスします。

スキルアップ/キャリアアップ(JOB@IT)