FormAuthentication Ticketが有効期限切れであるかどうかを確認したい各ページで、ユーザーがサインインするときにFormAuthentication Ticketを使用しているasp.netアプリケーションがあります。FormAuthenticationチケットの有効期限チェック
実際に私は2つのシナリオ
私は、ユーザーが認証されているかどうかを確認したいかで署名せずに直接ページにアクセスしようとしている(この場合、私は「のDefault.aspx」にリダイレクトしたい
を持っています
ユーザーが既に署名されて認証されていてもタイムアウトが発生した場合(この場合は、「sexpired.aspx」ページにリダイレクトして「セッションが期限切れになった」という通知を受け取ります) Default.aspx "を返し、リターンURLに戻りますので、それに応じてアドバイスしてください。
現在、ここでオーケーを私はすべてのページでこれをやっていると私はクッキーの有効期限が切れたとき、それは、ユーザがそれが戻っ「Default.aspxの」へのリダイレクトページをロードしようとすると
User.Identity.IsAuthenticated = false
もタイムアウトに起こす可能だと思う
後ろのログインフォームのコードで私の更新質問さ:
protected void LoginButton_Click(object sender, EventArgs e)
{
if (AuthenticateUser("SPOINT", txtUsername.Text, txtPassword.Text))
{
//Fetch the role
Database db = DatabaseFactory.CreateDatabase();
//Create Command object
DbCommand cmd = db.GetStoredProcCommand("Users");
db.AddInParameter(cmd, "@userid", System.Data.DbType.String, 20);
db.SetParameterValue(cmd, "@userid", txtUsername.Text);
db.AddInParameter(cmd, "@fname", System.Data.DbType.String, 80);
db.SetParameterValue(cmd, "@fname", null);
db.AddInParameter(cmd, "@lname", System.Data.DbType.String, 80);
db.SetParameterValue(cmd, "@lname", null);
db.AddInParameter(cmd, "@phone", System.Data.DbType.String, 50);
db.SetParameterValue(cmd, "@phone", null);
db.AddInParameter(cmd, "@mobile", System.Data.DbType.String, 50);
db.SetParameterValue(cmd, "@mobile", null);
db.AddInParameter(cmd, "@email", System.Data.DbType.String, 100);
db.SetParameterValue(cmd, "@email", null);
db.AddInParameter(cmd, "@uroleids", System.Data.DbType.String, 50);
db.SetParameterValue(cmd, "@uroleids", null);
db.AddInParameter(cmd, "@uroles", System.Data.DbType.String, 500);
db.SetParameterValue(cmd, "@uroles", null);
db.AddInParameter(cmd, "@umenu", System.Data.DbType.Int16);
db.SetParameterValue(cmd, "@umenu", null);
db.AddInParameter(cmd, "@ustatus", System.Data.DbType.String, 1);
db.SetParameterValue(cmd, "@ustatus", null);
db.AddInParameter(cmd, "@reqType", System.Data.DbType.String, 1);
db.SetParameterValue(cmd, "@reqType", "R");
db.AddOutParameter(cmd, "@retval", DbType.Int16, 2);
IDataReader reader = db.ExecuteReader(cmd);
System.Collections.ArrayList roleList = new System.Collections.ArrayList();
if (reader.Read())
{
roleList.Add(reader[0]);
string myRoles = (string)roleList[0];
//Read user name
string uname = (string)reader[1];
//Read User menu ID
int menuID = Convert.ToInt16(reader[2]);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, txtUsername.Text, DateTime.Now,
DateTime.Now.AddMinutes(30), true, myRoles, FormsAuthentication.FormsCookiePath);
//Read user full name in session variable which will be shared across the whole application
Session["uid"] = txtUsername.Text;
Session["ufullname"] = uname; //myname; //uname;
Session["branch"] = 1;
//For security reasons we may hash the cookies
string hashCookies = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);
// add the cookie to user browser
Response.Cookies.Add(cookie);
//Constructing Menu according to User Role
string x = buildmenu(menuID);
Globals.menuString = null;
Globals.menuString = x;
string returnURL = "~/Main.aspx";
//Close reader object to avoid Connection Pooling troubles
reader.Close();
if (Request.QueryString["rUrl"] != null)
Response.Redirect(Request.QueryString["rUrl"]);
else
Response.Redirect(returnURL);
}
else
{
//Validation Error here...
lblError.Text = "Incorrect UserID/Password entered...";
return;
}
}
else
{
lblError.Text = "Incorrect UserID/Password entered...";
return;
}
}
ここでは、私はformauthenticationチケットに
if (!HttpContext.Current.User.Identity.IsAuthenticated || !HttpContext.Current.User.IsInRole("Maker"))
Response.Redirect("~/Default.aspx");
をチェックしていますどこの背後に私のコードです
を、私は私の質問を編集し、上formauthenticationのための完全なコードを貼り付けていますログインボタン。私は本当に感謝してくれる人plzが応答します。 – user239684
コードの2番目のセクション(HttpContext.Current.User.Identity.IsAuthenticated)、ここでticektをチェックします。どこですか? – djeeg
ユーザーがcurrent.user.Identityを認証したら、チケットを確認しません。IsAuthenticatedはセッションの更新された値を取得しますか?またはチケットを明示的にチェックする必要がありますか? – user239684