防止用户越过登陆页面:
Global.asax.cs文件中
protected void Session_Start(Object sender, EventArgs e)
{
/* 若用户欲越过登陆页面而直接访问其它页面,将其导航至登陆页面 */ string strFile = this.Context.Request.FilePath.ToString();
    string strRoot = Application["RootUrl"].ToString();
if(!strFile.Equals("/"+strRoot+"/Default.aspx"))
{
this.Response.Redirect("/"+strRoot+"/Default.aspx");
}
}

解决方案 »

  1.   

    是因为浏览器读缓存中的文件吧。在page2中设置
    <META http-equiv="content-type" content="no-cache">
      

  2.   

    原因是这样没有触发Page2的Page_Load事件
    ///
    不会的,那是你的Session还在,你可以在注销时删除该Session
      

  3.   

    我觉得楼上的说的有理,可是我用你的句子,还是不行啊,还是没有触发Page_Load事件。
    我的page2是aspx页,该怎么写啊?
      

  4.   

    我是说lbzq(longbow) 可能说的比较对吧,gOODiDEA(无语) ,的确没有触发啊。
      

  5.   

    我设定了断点的,的确没有触发Page_Load。
      

  6.   

    可以在web.config里面设置
    <authentication mode="Forms">
           <forms name=".ASPX" loginUrl="page1.aspx" protection="All" timeout="60" path="/">
           </forms>
    </authentication>
    <authorization>
           <deny users="?" />
    </authorization>
      

  7.   

    用if session("user")=null then 
    end if
      

  8.   

    slinfo,我像你那样做了结果登录都不行了,该怎么做啊?
    没有人有过相同的问题吗?
      

  9.   

    page1.aspx:(login)
      Session["UserID"]="xxx";//记录已经登陆的用户
    RegisterOff.aspx  //注销
      if (Session.Keys[i]=="UserID")
        Session.RemoveAt(i);
    page2.aspx
       Page_load()
       {
          if ((string)Session["UserID"]==null)
          {
             Response.Redirect("page1.aspx?mode=timeout");
          }
       }
      

  10.   

    不是啊,我是希望每次显示PAGE2的时候都触发page_load事件,否则怎么验证啊?
      

  11.   

    本来每次访问都会触发OnLoad事件(一般都处理到Page_Load函数),不会说第一次有触发,第二次就没了的
    可能是你程序验证逻辑的错误,能否贴出一些代码
      

  12.   

    我想你可以试试在每个页面的page_load里边最顶端写:
    if(Session["asdf"]== null)
    {
        Response.Redirect("登陆页面!");
    }
    试试看!
      

  13.   

    // 程序有没有这一段? #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
      

  14.   

    freexin(小昕) ,你说的那段代码我的页面上当然有。
    代码:private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
       if (Session["id"] == null String)||((Stirng)Session["id"] == "0"))
       {
    Response.Write(PAGE_NOLOG);
       }
    }
    //我是把id设置为0,表示未登录
      

  15.   

    上面有点错
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
       if (Session["id"] == null )||((Stirng)Session["id"] == "0"))
       {
    Response.Write(PAGE_NOLOG);
       }
    }
    //我是把id设置为0,表示未登录
      

  16.   

    我刚才重新建了一个工程共2个网页又试了一次,的确没有触发Page_Load事件,大家可以试一试。建立page1、page2,它们上面各有一个按钮实现相互重定向。通过page1上的按钮转到page2,再拷贝下page2的网址,然后点击按钮定向到page1,这时输入拷贝的刚才访问了的page2的网址,回车,你就会发现根本没有触发page2的page_load事件。我也就无重验证了,别人又能看见page2了,怎么办啊?
    是不是要用到JavaScript啊?
      

  17.   

    是不是该禁止对页面缓存,用no-cache,具体该怎么做啊?
      

  18.   

    在aspx编辑页的左下点html在head中间加入
    <META http-equiv="content-type" content="no-cache">
    或者在head与body之间加入
    <%response.expires=0 %>
    这个不能保证完全有效。我也正在找有没有更好的方法。
      

  19.   

    关注ing, slinfo() 的方法我也试过,可是每次总是定在登陆页,无法跳转了,如果能写详细点,感觉应该是最好的方法
      

  20.   

    但是这样你试试
    {
    if (Session["User"].ToString()!="" )
    {
    Session.Remove("User");
    Session.RemoveAll();
    Session.Abandon(); }
      

  21.   

    我搞定了!就是slinfo()的方法!
    只是在buttonke点击事件Redirect到其它页面之前先用
    Systerm.Web.Security.FormsAuthentication.RedirectFromLoginPage(User_Id,false);就可以了!
    注销用Systerm.Web.Security.FormsAuthentication.SignOut();
      

  22.   



    if session("user")=null then 
    end if