ASP.Net会话中的持久化对象
我正在开发一个ASP.Net应用程序(intranet),它需要用户进行身份验证才能访问门户 当前,一旦成功验证,我将员工对象保存到InProc会话状态中。然后在母版页的PageLoad方法上,我检查员工的会话是否为空(null),这意味着当前请求没有经过身份验证,然后我重定向到登录页面 母版页页面加载:ASP.Net会话中的持久化对象,asp.net,session,Asp.net,Session,我正在开发一个ASP.Net应用程序(intranet),它需要用户进行身份验证才能访问门户 当前,一旦成功验证,我将员工对象保存到InProc会话状态中。然后在母版页的PageLoad方法上,我检查员工的会话是否为空(null),这意味着当前请求没有经过身份验证,然后我重定向到登录页面 母版页页面加载: if (Session["Employee"] == null) Response.Redirect("~/Login.aspx"); 我还几乎在每个页面上使用员工的会话来获取有关已登录员工
if (Session["Employee"] == null) Response.Redirect("~/Login.aspx");
我还几乎在每个页面上使用员工的会话来获取有关已登录员工或其权限级别等的详细信息
我的问题:
if (Session["Employee"] == null) Response.Redirect("~/Login.aspx");
- 上述技术是否适合处理此类场景
- 如何以及在何处检查统一位置中是否存在会话
public static string GetCurrentUsername()
{
if (Session["Employee"] == null)
throw new SomeKindOfAuthenticationException();
return ((EmployeeObject)Session["Employee"]).Username;
}
然后在整个应用程序中,只需将用户跟踪对象调用到GetCurrentUsername
。在Application\u Error
中,您可以通过重定向到登录页面来处理身份验证异常。(对于未经身份验证的用户,这通常被认为是比在上述方法中返回空字符串更好的做法。在整个应用程序中,必须不断检查空字符串,而异常处理可以在单个位置进行。如果您需要特定页面,则不需要在他的情况下,而不是只是不显示一些东西,包装在异常处理本地到该页面的调用,并相应地处理它。)
当然,考虑到这主要是一个高级设计推测,我并不是指我面前的实际实现。可能是静态
会导致会话出现问题
?也许您需要将其传递给会话
?这个类应该存储在哪里?您还应该执行哪些其他错误检查?等等
- 会话结束后是否可以触发方法
您可以在所有aspx页面中继承BasePage。下面是示例
public class BaseClass : System.Web.UI.Page
{
public String UserName
{
get
{
if (HttpContext.Current.Session["UserName"] == null)
Response.Redirect("Login.aspx");
return Convert.ToString(HttpContext.Current.Session["UserName"]);
}
}
我还几乎在每页都使用员工的会话来获取一些信息
有关已登录员工或其权限级别等的详细信息
谢谢你的回答,我会阅读更多关于基类的内容,我认为这会很有用。谢谢David的详细回答,我已经相应地修改了代码,我制作了一个静态类,就像你的示例代码一样,但是