在BasePage页中重写OnLoad事件进行Session的验证,但如果页面刷新或者提交数据时,如何进行Session的验证呢?

解决方案 »

  1.   

    http://express.ruanko.com/ruanko-express_16/webpage/tech3.html
      

  2.   

    我看了文章,这个还是没有解决我的问题。
    我的意思是:如果页面长时间没有操作,Session过期后,用户进行操作,如:刷新、提交数据等。在这种情况下,如何使用BasePage页面判断Session是否过期。
      

  3.   

    简单的方法就是存个值到Session里,想知道过期没,判断这个值就行
      

  4.   

    如果单纯是什么“过期”问题,那么你可以轻松地使用ajax方式每隔几分钟访问一次服务器即可。其实这个重复过很多次,真正放在实际网站系统上,asp.net的session集合的问题不是出现在过期上,而是根本没有到时间就丢失了。如果你解决这个问题,那么过期问题迎刃而解,因为都不丢失了那么你必定可以控制其生命期足够长时间。
      

  5.   


    using System;
    using System.Data;
    using System.Configuration;
    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;/// <summary>
    ///PgageBaseModule 的摘要说明
    /// </summary>
    public class PgageBaseModule : Page
    {
        public PgageBaseModule()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
            Load += new EventHandler(CommonPage_Load);
        }
           void CommonPage_Load(object sender, EventArgs e)
            {
                 if (!SessionBox.CheckUserSession())
                {
                    Response.Write("<script language = javascript>alert('请先登录!');window.parent.location.href='../login.aspx'</script>");
                    Response.End();
    } //如果不存在会员会话信息则跳转到用户登录页面
                
            }
    }页面继承这个类就行了
      

  6.   

    再说明确一点,假设你从来不会遇到session丢失情况,那么很简单地从javascript端随便调一行ajax就可以让Session永远不过期。20分钟这个限制对于你已经不存在了。
      

  7.   

    我的意思并不是要Session永远不过期。我只是想在BasePage页面中判断Session是否过期,而不想在每个页面中去判断。
    比如:在提交数据时,可能需要判断Session是否过期,那每个提交事件都去写代码判断Session是否过期,就觉得有点烦。
    在BasePage中有很多事件,我想知道的是,在BasePage中使用什么事件来判断在数据提交或刷新页面时,Session是否过期。
    我现在可能做到提,在页面第一次加载的时候判断Session是否过期,采用的是OnLoad事件。
      

  8.   

    实现伪静态后,是不是要把网页中的每个连接都要改?isapi_rewrite 规则如下RewriteRule /Article/(\d*).html /Article.aspx?Id=$1 [I]只是这样网站还不能正常工作。这时候还要通过后台程序把网页中的 <A> 链接更新为 这样形式:“/Article/123.html”. 是不是?  
      

  9.   

    看来,只有在每个页面对Session进行验证了。
      

  10.   

    如梦的一个判断方法: public partial class BasePage : System.Web.UI.Page
        {
            public BasePage() { }        protected override void OnInit(EventArgs e)
            {
                if (base.Session["LoginName"] == null || base.Session["LoginName"].ToString() == String.Empty)
                {
                    Response.Redirect("~/Manager/inheritPage/Error.aspx");
                }
            }
        }Error.aspx
     protected void Page_Load(object sender, EventArgs e)
            {
                Response.Write("<script>top.location.href='../Default.aspx';</script>");  
            }
      

  11.   

    或者用当前请求上下文对象HttpContext.Current其实Page类最终也是用的这个对象
      

  12.   

    如果刷新的话应该也走onload事件吧?
    另外,根本问题还是sp说的丢失问题
      

  13.   

    原来验证不是在这儿写,应该是在HttpHandle或HttpModule中去写。研究下,结贴!
      

  14.   


        /// <summary>
        /// 要监听的事件。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BasePage_Load()
        {
            //权限角色表检查
            #region 权限角色检查
            if (Session["login"] == null || Session["roles"] == null)
            {
                string Name = Context.User.Identity.Name.ToString();//用户名
                //添加权限
                Session["login"] = new BLL.accounts().SelePermissionByUsername(Name);
                //添加角色名称
                Session["roles"] = new BLL.accounts().SeleRolesdescriptionByUsername(Name);
            }
            #endregion        //权限检查
            #region 权限检查
            bool Permission = true;//初始值为没有权限
            if (Session["login"] != null)
            {
                System.Collections.ArrayList list = (System.Collections.ArrayList)Session["login"];
                if (list.Contains(PermissionID))
                {
                    Permission = false;//验证通过
                }
            }
            if (Permission)//权限验证不通过
            {
                Response.Clear();
                Response.Write("<script language=\"javascript\">alert(\"对不起,你没有权限进入\");history.go(-1);</script>");
                Response.End();
            }
            #endregion
        }