パスワードのAutoCompleteを無効にする方法について解説します。
ASP.NET2.0からはTextBoxのオートコンプリート設定を無効にする場合、AutoCompleteTypeプロパティにDisabledを設定すれば対応することができます。
TextBoxへのAutoCompleteTypeの設定
<asp:TextBox ID="TextBox1" runat="server" AutoCompleteType="disabled"></asp:TextBox>
上記のコードを実行すると以下のHTMLが出力されます。
AutoCompleteTypeにDisabledを設定した時に出力されるHTML
<input name="TextBox1" type="text" autocomplete="off" id="TextBox1" />
上記のようにAutoCompleteType="Disabled"の設定によりHTMLソースには、「autocomplete="off"」が出力され、この設定によりオートコンプリートは無効になります。
このサンプルの本題はパスワードを入力するテキストボックスに対するオートコンプリートの無効化です。
パスワード項目に対して上記設定を行う場合には注意が必要です。
オートコンプリートの対象がメールアドレスやユーザ名などの場合、上記のAutoCompleteTypeプロパティの設定で正常に動作しますが、パスワード項目(TextMode="Password")に対しては有効になりません。
パスワード項目に対してオートコンプリートを解除する方法は2つあります。
一つ目の方法ですが、通常パスワードは何らかのID項目(ログイン処理であれば、ログインIDとパスワードの組み合わせとなりますね)と併用しますが、そのID項目に対してAutoCompleteType="disabled"の設定を行う方法です。
以下の例ではID項目とパスワード項目を作成し、ID項目に対してAutoCompleteType="disabled"設定をしています。
クリックしてみてもメッセージは出力されない事がわかります。(※ブラウザの設定でオートコンプリートが無効になっていれば関係ありません)
この方法の欠点は、ID項目はオートコンプリートの対象にしたい場合やID、パスワードの他にも入力項目がある場合にはそれらに対してもutoCompleteType="disabled"の設定をする必要があるということです。(多分そうだと思います※検証していません)
2つ目の方法は確実にパスワード項目に対してオートコンプリート解除設定ができます。
当たり前のような方法ですが、パスワードのTextBoxコントロールにautocomplete="off"属性を埋め込む方法です。
以下はページのロード処理で実装するサンプルです。
TextBoxのAttributesを利用したオートコンプリート解除サンプル
this.txtPassword.Attributes.Add("autocomplete", "off");
この方法の方が確実ですね。
ちなみに上記1、2のオートコンプリート解除設定を行わない場合、以下のメッセージが出力されます。
メッセージはパスワードほ記録しますか?と聞いてくるのだけど、TextMode="Password"のTextBoxにAutoCompleteType="disabled"設定ができない。。。。
うーん、なんともいえないなぁ。。。