.NET TIPS [ASP.NET]匿名ユーザーごとのプロファイル情報を保存するには?[2.0のみ、C#、VB]山田 祥寛2006/08/18 |
|
|
「TIPS:[ASP.NET]ユーザーごとのプロファイル情報を管理するには?」でも紹介したように、ASP.NET 2.0で新たに導入されたプロファイル機能を利用することで、ユーザー単位の情報(プロファイル情報)をわずかなコーディングのみで容易に管理することができる。
もっとも、前掲のTIPSではプロファイル機能を利用するためにユーザー認証を行うことを前提にしていたので、やや回りくどいと感じられた読者もいたかもしれない。しかし、ASP.NET 2.0のプロファイル機能では、ちょっとした設定を追加することで、匿名ユーザーからもプロファイル情報を保存することが可能になる。
これにより、ユーザー固有の設定情報を、認証を行わずに管理することができる(基本的にクッキーにより識別されるので、正確には接続するPCごとの設定情報となる)。
そこで本稿では、前掲のTIPSのサンプル・プログラムを匿名ユーザーからも利用できるように変更してみよう。
1. 匿名ユーザーの識別を有効にする
匿名ユーザーがプロファイル機能を利用するには、まず匿名ユーザーの識別機能(匿名識別)が有効になっていなければならない。匿名識別を有効にするには、構成ファイルWeb.configに以下のような記述を追加すればよい。
|
|
匿名識別を有効にする定義(Web.config) | |
<anonymousIdentification>要素のenabled属性をtrueに設定する。 |
<anonymousIdentification>要素のenabled属性をtrueに設定することで、ASP.NETは内部的にGUID(Globally Unique Identifier)を発行し、それをクッキーに保存することで、匿名ユーザーを識別するというわけだ。
ほかにも<anonymousIdentification>要素ではクッキーの設定などに関する以下のような属性を設定可能だ。
属性 | 概要 | デフォルト | |||||||||
cookieless | GUIDの授受にクッキーを使用するか | UseCookies | |||||||||
|
|||||||||||
cookieName | クッキー名 | .ASPXANONYMOUS | |||||||||
cookiePath | クッキーのパス | /(ルート) | |||||||||
cookieProtection | クッキーの保護方法 | Validation | |||||||||
|
|||||||||||
cookieReuireSSL | クッキー送信にSSL通信を要求するか | false | |||||||||
cookieSlidingExpiration | スライド式の有効期限を使用するか | true | |||||||||
cookieTimeout | クッキーの有効期限 | 10000分(69日10時間40分) | |||||||||
domain | クッキーのドメイン | − | |||||||||
enabled | 匿名識別を有効にするか | false | |||||||||
<anonymousIdentification>要素で指定可能な主な属性 |
2. プロファイル・プロパティを匿名ユーザーに対応する
以上で、アプリケーション上での匿名識別が有効になった。しかし、ここまでの設定ではアプリケーションとして匿名ユーザーによるプロファイル機能の利用を認めただけで、個々のプロファイル・プロパティはデフォルトで匿名ユーザーによる利用を無効にしているので注意すること。
個々のプロファイル・プロパティで匿名ユーザーによる利用を可能にするには、別稿でも紹介した<profile>要素の設定を編集する必要がある。具体的には次のような属性を追加する。
|
|
匿名ユーザーによるアクセスを有効化(Web.config) | |
<add>要素のallowAnonymous属性でtrueを指定する。 |
以上の設定を行ったら、前掲のTIPSと同じ要領でProfile.aspxの動作を確認してみよう。認証ユーザーと同様に、画面で設定したプロファイルがブラウザを閉じた後も保持されることが確認できるはずだ。
■不要となったプロファイル情報の削除
なお、ASPNETDB.mdfを参照すれば、ASP.NET 2.0が匿名ユーザーに対して、内部的にランダムなユーザーID(GUID)を割り当てていることも確認できるはずだ。
匿名ユーザーがプロファイルを保存した場合 |
匿名ユーザーがプロファイルを利用した場合、ASP.NET内部ではユーザーIDが自動採番される。ここでは「83bf86ce-66ef-4aa3-915d-a10712d609d9」。 |
このユーザーIDをクライアント側にクッキーとして保存することで、プロファイル情報と匿名ユーザーとの関連付けを行っているというわけだ。従って、クライアント側でクッキーを削除してしまえば、プロファイルの関連付けはなくなってしまうので、aspnet_Profileテーブルで管理されたプロファイル情報は誰からも参照されないゴミとして残ってしまうことになる。
匿名ユーザーに対してプロファイル機能を有効にした場合には、このようなゴミを定期的に削除する必要があるだろう。一定期間アクセスされないプロファイル情報を削除するには、以下のようなコードを記述すればよい。
|
||
3カ月間アクセスされないプロファイル情報を削除するコード(上:C#、下:VB) |
“AspNetSqlProfileProvider”はMachine.configファイルで定義されたデフォルトのプロファイル・プロバイダだ。ここではデフォルトで指定されているAspNetSqlProfileProviderプロバイダ(SqlProfileProviderオブジェクト)を取得し、SqlProfileProvider.DeleteInactiveProfilesメソッドで非アクティブなプロファイル情報を削除している。
DeleteInactiveProfilesメソッドの構文は以下のとおり。
|
||
DeleteInactiveProfilesメソッドの構文(上:C#、下:VB) |
第1パラメータには削除対象のプロファイル情報をProfileAuthenticationOption列挙体(System.Web.Profile名前空間)の値で指定する。ProfileAuthenticationOption列挙体のメンバ(値)は以下のとおりだ。
メンバ | 概要 |
All | すべてのプロファイルを検索 |
Anonymous | 匿名プロファイルのみ検索 |
Authenticated | 認証済みプロファイルのみ検索 |
ProfileAuthenticationOption列挙体の主なメンバ(値) |
ここでは“Anonymous”値を指定しているので、匿名ユーザーのプロファイルのみを削除しているが、認証/匿名を問わず、削除対象としたい場合には“All”値を指定すればよい。
第2パラメータには、削除対象となる時刻(DateTimeオブジェクト)を指定する。プロファイル情報へのアクセスが、ここで指定された時刻より以前であった場合に、プロファイル情報は非アクティブであると見なされ、データベースから削除される(ここではAddMonthsメソッドで3カ月前の日時を取得しているので、3カ月以上アクセスがなかったプロファイル情報を削除していることになる)。
もっとも、削除にわざわざ人手をかけたくないという場合には、上記のようなコードをバッチ・ファイルとして用意しておき、タスク・スケジューラなどで定期的に実行することもできるだろう。タスク・スケジューラの利用方法については、「Windows TIPS:タスク・スケジューラとWSHで定例処理を実現する」をご参照いただきたい。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Webフォーム 処理対象:プロファイル 使用キーワード:<anonymousIdentification>要素 使用キーワード:<profile>要素 使用ライブラリ:ProfileAuthenticationOption列挙体(System.Web.Profile名前空間) 関連TIPS:TIPS:[ASP.NET]ユーザーごとのプロファイル情報を管理するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|