zoukankan      html  css  js  c++  java
  • 如何写好整站通用Session

    你开发的网站或是应用程序,少不了使用Session.其中有几个Session一定是贯通整站的,如判断是否登录成功,记录被验证成功的帐号等。比如在需要需要登录成功之后才可以访问的页面的Page_load都要写一个判断if (Session["LoginOK"] xxx || Session["LoginOK"] xxx)等等。如何才可以做到化繁为简,化长为短呢?

    可以尝试把这个些贯通整站的Session写在一个Biz的类别中,当然下面这个类别你还是可以扩展的。

    Biz.cs:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    /// <summary>
    /// Summary description for BizBase
    /// </summary>
    namespace Insus.NET
    {
        
    public class Biz
        {
            
    public Biz()
            {
                
    //
                
    // TODO: Add constructor logic here
                
    //
            }

            
    //存储判断是否成功登录
            public static bool LoginOk
            {
                
    get
                {
                    
    return (HttpContext.Current.Session["LoginOk"!= null && (bool)HttpContext.Current.Session["LoginOk"]);
                }
                
    set
                {
                    HttpContext.Current.Session[
    "LoginOk"= value;
                }
            }

            
    //存储登录验证成功之后的Account
            public static string Account
            {
                
    get
                {
                    
    return (HttpContext.Current.Session["Account"!= null ? HttpContext.Current.Session["Account"].ToString() : string.Empty);
                }
                
    set
                {
                    HttpContext.Current.Session[
    "Account"= value;
                }
            }

            
    //存储用户登录成功之后目标去向。
            public static string TargetPath
            {
                
    get
                {
                    
    return (HttpContext.Current.Session["TargetPath"!= null ? HttpContext.Current.Session["TargetPath"].ToString() : VirtualPathUtility.ToAbsolute("~/Default.aspx"));
                }
                
    set
                {
                    HttpContext.Current.Session[
    "TargetPath"= value;
                }
            }
        }
    }

    写好这个Biz类之后,你可以在登录页面的登录按钮使用上面Session:

    View Code
     //登录按钮
        protected void ButtonLogining_Click(object sender, EventArgs e)
        {
            
    //if (xxx) 如果验证成功
            {
                Biz.LoginOk 
    = true;  //登录成功设为True.
                Biz.Account = "xxx";  //记录登录成功的帐号
                Response.Redirect(Biz.TargetPath);  //转向目标页面
            }
        }

    到此为止,其本上算写好了。你想在任何一个页面取到用户登录的帐号,就可以如下取得:

    string currentAccount = Biz.Account;

    接下来,Insus.NET要说的是,用户如果一开始使用匿名访问网站,然后点击目标页面需要登录成功才能访问的链接,用户登录成功之后,能导向此页。又需要怎样实现呢?

    这样情况,你需要改一下你的站点,除了login页面和Logout页面外,所有页面的Page_load添加一句代码: 

    View Code
    protected void Page_Load(object sender, EventArgs e)
        {
           
    //如果此页面需要在登录验证成功之后,直接导向此页。
            Biz.TargetPath = Request.RawUrl;
        }

    还有一个问题,你的站点所有的网页面中,一些页面是需要登录才可以访问,一些需要匿名即可访问,那又要怎样控制与判断当前用户是否已经登录成功呢?解决这个问题,你可以写一个类别。如BasePage类,这个类别需要继承: System.Web.UI.Page ,这个类别中,写一个判断是否为成功登录方法:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    /// <summary>
    /// Summary description for BasePage
    /// </summary>
    namespace Insus.NET
    {
        
    public class BasePage : System.Web.UI.Page
        {
           
    //此方法判断是否登录
            public void LoginAuthorizationed()
            {
                
    if (!Biz.LoginOk) //成功能登录
                {
                    HttpContext.Current.Response.Redirect(Biz.TargetPath);  
    //导向目录页面。
                }
            }
        }
    }

    在写到需要验证的那些页面再继承这个BasePage类别即可,如:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Insus.NET;

    public partial class _Default : BasePage //继承BasePage
    {
        
    protected void Page_Load(object sender, EventArgs e)
        {
           
    //如果此页面需要在登录验证成功之后,直接导向此页。
            Biz.TargetPath = Request.RawUrl;

            
    //需要登录才能访问的页面,在Page_load放下面这个方法。
            LoginAuthorizationed();
        }
    }
  • 相关阅读:
    从boosting谈起
    《人月神话》读书摘记
    Python中input()的使用方法
    Web前端攻击方式及防御措施
    吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
    Mybatis的Mapper文件sql语句中使用常量值或者枚举常量值
    Java依据文件头获取文件类型
    MySQL查询优化
    RabbitMQ学习教程
    SpringBoot2.x.x + Shiro + Redis 前后端分离实现
  • 原文地址:https://www.cnblogs.com/insus/p/2032508.html
Copyright © 2011-2022 走看看