首先介绍一下:我的开发环境是VS2008

 

1、如何设置Session的失效时间


在web.config中的<authentication mode="Windows"/>后面添加下面的配置信息:

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="30" />

在这里设置Session的失效时间是30分钟。

 

2、当Session失效后如何跳转的登录界面重新登录

 

a:关于这个问题,我先前的想法是这样的:

如果有类似一种触发器的东西,当Session失效后,直接触发这个触发器,重新跳转到登录界面重新登录,

但是这个方法不知道能不能实现,如果有实现的麻烦把实现的方法交流一下,先谢谢了。

 

b:我这里介绍现在的处理方法:

     首先,写个公共的类BasePage,并且重写这个类的OnInit方法;

     然后,让每个页面继承这个公共的类BasePage。

     1)新建的公共类BasePage代码如下:

public class BasePage:System.Web.UI.Page
{
    public BasePage()
    {
        //
        //TODO: 在此处添加构造函数逻辑
        //
    }
    protected override void OnInit(EventArgs e)
    {
        if (Session["loginName"] == null || Session["loginName"] == "" || Session["loginDegree"] == null || Session["loginDegree"].ToString() == "")
        {
            Response.Redirect("~/Error.aspx");
            Response.End();
        }
        else
        {
            
        }
    }
}

   注明:在用户进行登录的时候,将用户的名称和用户的等级存放到Session中。

   2)每个页面继承这个基类BasePage

      说明:将每个页面后台中的,形如:public partial class _Default : System.Web.UI.Page

               改为:public partial class _Default :BasePage   即可。

       由于有框架的限制,当Session失效时,先跳转到过渡页面"Error.aspx",在通过这个页面跳转的登录页面即可。

 

c:仅仅这样的处理方式是不安全的,假如有一个页面(a),只有超级管理员能够操作,其他的操作人员都不能进入,

假如一般操作人员登录了系统,在Session没有失效时,只要把页面a的链接地址(前提是知道页面a的地址)打在地址栏中,同样可以登录到页面a中,这样是不安全的。

 

3、如何确保不同的用户对页面的访问权限

    对这个问题,又写了个方法 “bool  isError(int loginDegree,int userid,string moduleName)”

   这个方法包括用户的等级loginDegree,用户的id号userid,模块的名称moduleName

   在每个页面的Page_Load方法中都调用这个方法,如果该用户对这个模块有权限就登录,否则跳转到重新登录界面。

   这样处理就不会出现2中的不安全的问题了。