asp.net BasePage类+Session通用用户登录权限控制
程序员文章站
2024-03-07 18:22:27
但是很多人都喜欢在 复制代码 代码如下: protected void page_load(object sender, eventargs e) {} 里面来写代码,甚...
但是很多人都喜欢在
protected void page_load(object sender, eventargs e)
{}
里面来写代码,甚至在某些按钮里面写判断session是否存在~~
这样当然是能实现效果的,问题就在,如果有1000个页面~~你需ctrl+c。。。ctrl+v 很多次~~~
我的思路就是写一个basepage类继承 system.web.ui.page
public class basepage : system.web.ui.page
{
//pageunload事件,并不是指浏览器关闭,而是指页面关闭,所以刷新的时候,依然会执行以下事件
protected void page_unload(object sender, eventargs e)
{
}
protected override void onpreinit(eventargs e)
{
base.onpreinit(e);
if (!sessiondata.islogin())
{//这里写 跳转到登陆页面:例如:
response.redirect(string.format("~/relogin.aspx?page={0}", request.path));
}}
为什么我这里要带 page 参数,就是为了在登录成功以后可以返回到登录前的那一个页面
另外我也贡献一个sessiondata类:
using system;
using system.collections.generic;
using system.linq;
using system.web;
using expressplatform.common;
namespace expressplatform.web.appcode
{
public class sessionkey
{
public const string userinfo = "user";
}
/// <summary>
/// 所有session中的数据,在该类管理
/// </summary>
public class sessiondata
{
/// <summary>
/// 获取session 中的 用户信息
/// </summary>
/// <returns></returns>
public static mdlsessioncustomerinfo getuserinfo()
{
mdlsessioncustomerinfo userinfo = sessionmanager<mdlsessioncustomerinfo>.getsessionobject(sessionkey.userinfo);
if (userinfo == null)
{
userinfo = new mdlsessioncustomerinfo();
//把内容储存到应用程序
sessionmanager<mdlsessioncustomerinfo>.setsessionobject(sessionkey.userinfo, userinfo);
}
return userinfo;
}
/// <summary>
/// 重新设置session 中的用户信息
/// </summary>
/// <param name="userinfo"></param>
public static void setuserinfo(mdlsessioncustomerinfo userinfo)
{
sessionmanager<mdlsessioncustomerinfo>.setsessionobject(sessionkey.userinfo, userinfo);
}
/// <summary>
/// 清楚session中用户信息
/// </summary>
public static void clearuserinfo()
{
sessionmanager<mdlsessioncustomerinfo>.setsessionobject(sessionkey.userinfo, null);
}
/// <summary>
/// 是否登入
/// </summary>
/// <returns></returns>
public static bool islogin()
{
bool ret = false;
mdlsessioncustomerinfo userinfo = sessionmanager<mdlsessioncustomerinfo>.getsessionobject(sessionkey.userinfo);
if (userinfo != null)
ret = true;
return ret;
}
}
}
public class basepage : system.web.ui.page
复制代码 代码如下:
protected void page_load(object sender, eventargs e)
{}
里面来写代码,甚至在某些按钮里面写判断session是否存在~~
这样当然是能实现效果的,问题就在,如果有1000个页面~~你需ctrl+c。。。ctrl+v 很多次~~~
我的思路就是写一个basepage类继承 system.web.ui.page
复制代码 代码如下:
public class basepage : system.web.ui.page
{
//pageunload事件,并不是指浏览器关闭,而是指页面关闭,所以刷新的时候,依然会执行以下事件
protected void page_unload(object sender, eventargs e)
{
}
protected override void onpreinit(eventargs e)
{
base.onpreinit(e);
if (!sessiondata.islogin())
{//这里写 跳转到登陆页面:例如:
response.redirect(string.format("~/relogin.aspx?page={0}", request.path));
}}
为什么我这里要带 page 参数,就是为了在登录成功以后可以返回到登录前的那一个页面
另外我也贡献一个sessiondata类:
复制代码 代码如下:
using system;
using system.collections.generic;
using system.linq;
using system.web;
using expressplatform.common;
namespace expressplatform.web.appcode
{
public class sessionkey
{
public const string userinfo = "user";
}
/// <summary>
/// 所有session中的数据,在该类管理
/// </summary>
public class sessiondata
{
/// <summary>
/// 获取session 中的 用户信息
/// </summary>
/// <returns></returns>
public static mdlsessioncustomerinfo getuserinfo()
{
mdlsessioncustomerinfo userinfo = sessionmanager<mdlsessioncustomerinfo>.getsessionobject(sessionkey.userinfo);
if (userinfo == null)
{
userinfo = new mdlsessioncustomerinfo();
//把内容储存到应用程序
sessionmanager<mdlsessioncustomerinfo>.setsessionobject(sessionkey.userinfo, userinfo);
}
return userinfo;
}
/// <summary>
/// 重新设置session 中的用户信息
/// </summary>
/// <param name="userinfo"></param>
public static void setuserinfo(mdlsessioncustomerinfo userinfo)
{
sessionmanager<mdlsessioncustomerinfo>.setsessionobject(sessionkey.userinfo, userinfo);
}
/// <summary>
/// 清楚session中用户信息
/// </summary>
public static void clearuserinfo()
{
sessionmanager<mdlsessioncustomerinfo>.setsessionobject(sessionkey.userinfo, null);
}
/// <summary>
/// 是否登入
/// </summary>
/// <returns></returns>
public static bool islogin()
{
bool ret = false;
mdlsessioncustomerinfo userinfo = sessionmanager<mdlsessioncustomerinfo>.getsessionobject(sessionkey.userinfo);
if (userinfo != null)
ret = true;
return ret;
}
}
}
复制代码 代码如下:
public class basepage : system.web.ui.page