ASPサイトで「Rememberme」オプションを作成しましたが、クライアントは、「logout」を押した後でも、ユーザーフィールドにログイン名を表示したいと言っていました。別のログイン名を二度と使用しない限り、これは機能します。コードビハインドのテキストボックスに値を割り当てると、手動で新しい値を入力した場合でも、古い値が使用されます。
例:
- ユーザー/パスワード(例:User1)を入力し、[Remember me]をクリックして、正常にログインします。
- ログアウトすると、ログインページにリダイレクトされます。page_loadイベントで、ユーザー名が保存された有効なCookie(User1)があることを検出し、値を読み取ってテキストフィールドを設定します。
- ログインを他の何か(例:User2)に変更しましたが、無効なユーザー/パスワードを表示できません。変。
- データを確認しましたが、古いテキストフィールド(User1)を使用しています。別の(例:User3)を試し、ログインを押します。失敗し、Textプロパティを確認すると、画面上ではUser3と表示されていても、User1と表示されます。
コードビハインドファイルに設定すると、何をしても変更されません。一度テキストフィールドを設定すると、変更できないようになります。これは正しくありませんが、私にはそれについての良い説明がありません。
問題のコードは次のとおりです。
ページの読み込み:
protected void Page_Load(object sender, EventArgs e)
{
if (Request.ServerVariables["AUTH_USER"] != null && !Request.ServerVariables["AUTH_USER"].Equals(""))
{
login.Visible = false;
logout.Visible = true;
btnLogout.Text = "Logout " + Request.ServerVariables["AUTH_USER"];
}
else
{
login.Visible = true;
logout.Visible = false;
CheckLoginCookie();
}
}
Cookieを設定するコード:
private void SaveLoginCookie()
{
try
{
Response.Cookies["KYSUSR"].Value = txtLoginUsername.Text.Trim();
Response.Cookies["KYSUSR"].Expires = DateTime.Today.AddMonths(6);
}
catch (Exception ex)
{
ExceptionHandling.SendErrorReport(this, ex);
}
}
Cookieをロードするコード:
private void CheckLoginCookie()
{
try
{
if (Request.Browser.Cookies)
{
if (Request.Cookies["KYSUSR"] != null && Request.Cookies["KSYFOR"] != null)
{
// logged in as remember
if (Request.Cookies["KYSFOR"].Value == "R")
txtLoginUsername.Text = Request.Cookies["KYSUSR"].Value;
// once set here, the Text property never changes regardless of what is entered into it
}
}
}
catch (Exception ex)
{
ExceptionHandling.SendErrorReport(this, ex);
}
}
ログインを行うためのコード:
protected void btnLogin_Click(object sender, EventArgs e)
{
try
{
String user = txtLoginUsername.Text.Trim();
if (chkSaveUser.Checked)
SaveLoginCookie();
else
{
// set cookie as expired so browser will clear it
Response.Cookies["KYSUSR"].Expires = DateTime.Today.AddDays(-1);
}
if (CheckLogin(user, txtLoginPassword.Text))
{
if (chkSaveUser.Checked)
{
FormsAuthentication.SetAuthCookie(user, true);
}
FormsAuthentication.RedirectFromLoginPage(txtLoginUsername.Text.Trim(), false);
}
}
catch (Exception ex)
{
ExceptionHandling.SendErrorReport(this, ex);
}
}
Textプロパティが変更されないのはなぜですか?