0

スタッフ、エンド ユーザー、管理者などの複数のアカウントを持つ 1 つの Web サイトがあります。

ただし、ユーザーがアカウントにログインしている間に各セッションを作成しています。

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);
    }
}
4

1 に答える 1

2

セッションはデフォルトで 20 分間続きます - IIS の設定と web.config にもよります。セッションの有効期限が切れると、global.asax の Session_End イベントが発生します。そこから、正確にリダイレクトすることはできず、とにかくリダイレ​​クトするのに適切な場所ではありません.

たとえば、すべてのページにあるユーザーコントロールを作成するか、すべてのページの派生元のマスターページを作成する必要があります.Sessionが空の場合は、すべてのリクエストを確認できます. その場合は、ログオン ページにリダイレクトします。

私はこれを何度もやったことがありますが、うまくいきます。

ユーザーコントロールの prerender イベントでこれを持っています:

if (Context.Session != null && Context.Session.IsNewSession)
            {
                if (this.Page.User != null && this.Page.User.Identity.IsAuthenticated)
                {
                    FormsAuthentication.SignOut();
                    Response.Redirect("~/Login.aspx");
                }
            }    
于 2013-11-13T13:14:16.767 に答える