2013-11-13 4 views
0

У меня есть один веб-сайт с несколькими учетными записями, такими как персонал, конечный пользователь и администратор.Как эффективно обрабатывать сеанс в asp.net

Однако я создаю каждый сеанс, пока пользователь входит в свою учетную запись.

if (Page.IsValid) 
     { 
      string type_name=""; 
      int returnValue = DatabaseHelper.GetLogin(txtusername.Text.Trim(), txtpassword.Text.Trim(), out type_name); 
      if (returnValue == 1) 
      { 
       if (chk_remember.Checked == true) 
       { 
        if (type_name.Trim()=="Admin") 
        { 
         Response.Cookies["UName"].Value = txtusername.Text; 
         Response.Cookies["PWD"].Value = txtpassword.Text; 
         Response.Cookies["UName"].Expires = DateTime.Now.AddMonths(2); 
         Response.Cookies["PWD"].Expires = DateTime.Now.AddMonths(2); 
         Session["username"] = txtusername.Text.Trim(); 
         Response.Redirect("~/Admin/Admin_Landing_page.aspx"); 
        } 
        else if (type_name.Trim()=="User") 
        { 
         Response.Cookies["UName"].Value = txtusername.Text; 
         Response.Cookies["PWD"].Value = txtpassword.Text; 
         Response.Cookies["UName"].Expires = DateTime.Now.AddMonths(2); 
         Response.Cookies["PWD"].Expires = DateTime.Now.AddMonths(2); 
         Session["username"] = txtusername.Text.Trim(); 
         Response.Redirect("~/EndUser/myhome.aspx"); 
        } 
       } 
       else 
       { 
        Response.Cookies["UName"].Expires = DateTime.Now.AddMonths(-1); 
        Response.Cookies["PWD"].Expires = DateTime.Now.AddMonths(-1); 
        if (type_name.Trim()== "Admin") 
        { 
         Session["username"] = txtusername.Text.Trim(); 
         Response.Redirect("~/Admin/Admin_Landing_page.aspx"); 
        } 
        else if (type_name.Trim()== "User") 
        { 
         Session["username"] = txtusername.Text.Trim(); 
         Response.Redirect("~/EndUser/myhome.aspx"); 
        } 
       } 
      } 
      else if (returnValue == -1) 
      { 
       ltr_error.Text = "Authentication failed..contact administrator"; 
      } 
      else 
      { 
       ltr_error.Text = "Invalid username or password"; 
      } 
     } 
    } 

Здесь созданы сеансы, но как я обрабатываю их в течение длительного времени, насколько это возможно, в тайм-аут ASP.NET? Это способ обрабатывать их с помощью файла global.asax?

Также, как перенаправить пользователя на страницу входа, если в приложении нет сеанса?

------------------------------------- Обновлено ------- ---------------------------------

using System; 
using System.Collections; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 

public partial class WebUserControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected override void OnPreRender(EventArgs e) 
    { 
     if (Context.Session != null && Context.Session.IsNewSession) 
     { 
      if (this.Page.User != null && this.Page.User.Identity.IsAuthenticated) 
      { 
       FormsAuthentication.SignOut(); 
       Response.Redirect("~/Default.aspx"); 
      } 
     }  
     base.OnPreRender(e); 
    } 
} 
+0

Что ваш вопрос? Я думаю, что это либо «Как создать сеанс?», «Могу ли я увеличить период таймаута сеанса?» или «Как мне работать с тайм-аутом?» –

+0

Как я могу увеличить время сеанса и как справиться с тайм-аутом. –

+0

Ответ Ахмеда ниже, идеально. –

ответ

2

сессия по умолчанию длится 20 минут - в зависимости от на настройке в IIS, а также на web.config. Если сессия закончилась, событие Session_End в global.asax будет запущено. оттуда вы не можете точно перенаправлять и не будет подходящим местом для перенаправления.

Вы должны создать пользовательский элемент управления, например, который находится на каждой странице, или даже лучше, чем главная страница, из которой происходят все страницы, и вы можете проверить каждый запрос, если сеанс пуст. если да, переадресовывайтесь на страницу входа.

Я делал это много раз и работает.

У меня есть это на событие пререндер в элементе управления пользователя:

if (Context.Session != null && Context.Session.IsNewSession) 
      { 
       if (this.Page.User != null && this.Page.User.Identity.IsAuthenticated) 
       { 
        FormsAuthentication.SignOut(); 
        Response.Redirect("~/Login.aspx"); 
       } 
      }  
+0

ya Я добавил пользовательское управление и записывает ваш метод в событие Pre_Render. как я реализую на главной странице. см. мой обновленный вопрос. –

+0

главная страница была предложением. просто поместите элемент управления на страницы, которые вы хотите проверить на состояние окончания сеанса/new, и все готово. или если у вас есть главная страница, на которой все страницы выходят, а затем набросьте контроль на главной странице ... сделайте задание. –

+0

- это так: <% @ Reference Control = "~/WebUserControl.ascx"%> –

 Смежные вопросы

  • Нет связанных вопросов^_^