J'ai une application asp.net où j'utilise FormAuthentication Ticket lorsque l'utilisateur se connecte .... sur chaque page Je veux vérifier si le ticket FormAuthentication a expiré.FormAuthentication Vérification de l'expiration du ticket
En fait, j'ai deux scénarios
Je veux vérifier si l'utilisateur est authentifié ou tenter d'accéder directement à la page sans se connecter (dans ce cas, je veux rediriger sur « Default.aspx »
Si l'utilisateur est déjà signé et authentifié mais que le délai est expiré (dans ce cas je souhaite rediriger vers la page "sexpired.aspx" où l'utilisateur sera informé "votre session a expiré veuillez vous reconnecter" avec le lien " Default.aspx "et redirigera vers l'url de retour.S'il vous plaît aviser et suggérer des solutions en conséquence
Actuellement, je fais cela sur chaque page et je pense que quand cookie expire il fait User.Identity.IsAuthenticated = false
également causer à délai d'attente lorsque l'utilisateur tente de charger la page, il redirige vers « Default.aspx »
D'accord ici ma question est mis à jour avec formulaire de connexion code sous-jacent:
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;
}
}
Voici mon code derrière lequel je vérifie un billet d'formauthentication
if (!HttpContext.Current.User.Identity.IsAuthenticated || !HttpContext.Current.User.IsInRole("Maker"))
Response.Redirect("~/Default.aspx");
J'ai modifié ma question et collé le code complet pour formauthentication sur bouton de connexion. Les gars plz répondent que j'apprécierais vraiment. – user239684
la deuxième section de code (HttpContext.Current.User.Identity.IsAuthenticated), où vous vérifiez le ticekt, où est-ce? – djeeg
Je ne vérifie pas le ticket une fois que l'utilisateur a authentifié le current.user.Identity.IsAuthenticated obtient la valeur mise à jour pour la session NO? ou dois-je vérifier le ticket explicitement? – user239684