У меня есть приложение asp.net, в котором я использую билет FormAuthentication, когда пользователь выполняет вход .... на каждой странице я хочу проверить, не истек ли срок действия билета FormAuthentication.
На самом деле у меня есть два сценария
Я хочу проверить, прошел ли пользователь аутентификацию или пытается получить доступ к странице напрямую без входа (в этом случае я хочу перенаправить на «Default.aspx»
Если пользователь уже подписан и аутентифицирован, но истекло время ожидания (в этом случае я хочу перенаправить на страницу «sexpired.aspx», где пользователь будет уведомлен «Ваш сеанс истек, пожалуйста, войдите снова» с помощью ссылка на "Default.aspx", и он будет перенаправлен обратно на URL-адрес возврата. Пожалуйста, посоветуйте и предложите соответствующие решения.
В настоящее время я делаю это на каждой странице, и я думаю, что когда срок действия cookie истекает, он User.Identity.IsAuthenticated = false
также вызывает тайм-аут, когда пользователь пытается загрузить страницу, которую он перенаправляет обратно в «Default.aspx»
Хорошо, вот мой обновленный вопрос с кодом формы входа в систему:
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;
}
}
Вот мой код, где я проверяю билет для проверки подлинности
if (!HttpContext.Current.User.Identity.IsAuthenticated || !HttpContext.Current.User.IsInRole("Maker"))
Response.Redirect("~/Default.aspx");