首先介绍一下:我的开发环境是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中的不安全的问题了。