修改以前项目遇到,所有页面继承BaseBage,Sesssion保存一个model,实现登录(记录一下)

1.登录页面是这个样子的,比较丑-_-(惆怅),点击选购的时候会判断是否登录,如果登录了就正常,不登录弹出一个框让其登录

2.用了一个弹窗组件layer(还挺好用)

<script type="text/javascript">
    function buy() {
        var uname = document.getElementById("<%=username.ClientID %>").value;
        if (uname == "未登录") { login(); }
        else { gd(); }
    }
    function login() {
        layer.open({
            type: 2,
            title: '登录',
            shadeClose: true,
            shade: 0.4,
            area: ['400px', '300px'],
            content: '/login2.aspx'
        });
    }
    function gd() {alert("你已登录了!");}
</script>

3.这样就跳到登录页面了,(登录页面也丑的一B,哭瞎了)

<div>用户名:<input type="text" id="uname" /><br />
密码:<input type="text" id="password" /><br />
<input type="button" value="登录" onclick="Rstr()" /></div>

<script type="text/javascript">
        function Rstr() {
            var uname = document.getElementById("uname").value;
            var password = document.getElementById("password").value;
            if (uname == "") {
                alert("用户名不能为空!"); document.getElementById("uname").focus();return;
            }
            else if (password == "") {
                alert("密码不能为空!");document.getElementById("password").focus();return;
            } else {
                $.ajax({
                    url: "/tools/Submit.ashx?action=UserLogin",
                    type: "post",
                    data: { "username": uname, "password": password },
                    success: function (data) {
                        var json = JSON.parse(data);//用的是json2.js解析一下
                        if (json.status == 1) {
                //layer的东西把登录后的用户名传值给父窗口,并把父窗口关闭(原声js也行 只是没这么方便) parent.$("[id$='username']").val(json.msg); var index = parent.layer.getFrameIndex(window.name); parent.layer.close(index); reload(); } else { alert(json.msg); } return false; } }); }} </script>
#region============用户登录==============
        private void UserLogin(HttpContext context)
        {
            string username = context.Request["username"];
            string password = context.Request["password"];
            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty((password)))
            {
                context.Response.Write("{"status":0, "msg":"请输入用户名或密码!"}");
                return;
            }
            else
            {
                //Session保存一个model的信息,model是用户类,model的设置在下面
                Userinfo model = Userinfo.Getmodel(username,password);
                HttpContext.Current.Session["Users"] = model;
                HttpContext.Current.Session.Timeout = 45;
                Common.WriteCookie("uName", "加密",username, 180);
                Common.WriteCookie("uPassword", "加密", password, 180);
                context.Response.Write("{"status":1, "msg":"" + username + ""}");
            }
        }
        #endregion

  

//Userinfo存入cookie中的model
    public partial class Userinfo
    {
        public virtual string Username { get; set; } 
        public virtual string Sex { get; set; }
        public virtual string Name { get; set; }
        #region  模仿登录,返回model值
        public static Userinfo Getmodel(string username,string password)
        {
            Userinfo model = new Userinfo {Username =username, Sex = "男", Name = "李"};
            return model;
        }
        #endregion
    }
    //User继承Userinfo,是一个完整的用户信息
    public class User:Userinfo
    {
        public virtual string Password { get; set; }
    }

 4.用户已经登录了,写一个用户登录的铺助类(aspx这个不好,mvc已经自带了)

  

 public class BaseBage : System.Web.UI.Page //要继承System.Web.Ui.Page
    {
        protected Userinfo Model;
        public BaseBage()//构造函数
        {
            this.Init += new EventHandler(BaseBage_int);
        }
        private void BaseBage_int(object sender, EventArgs e)//加入IInit事件
        {
            Model = GetUserInfo();
            InitPage();
        }
        /// <summary>
        /// 构建一个虚方法,供子类重写
        /// </summary>
        protected virtual void InitPage()
        {
            //无任何代码
        }
        #region 会员用户方法==========================================
        /// <summary>
        /// 判断用户是否已经登录(解决Session超时问题)
        /// </summary>
        public static bool IsUserLogin()
        {
            //如果Session为Null
            if (HttpContext.Current.Session["Users"] != null)
            {
                return true;
            }
            else
            {
                //检查Cookies
                string username = Common.GetCookie("uName", "加密");
                string password = Common.GetCookie("uPassword", "加密");
                if (!string.IsNullOrEmpty(username) || !string.IsNullOrEmpty(password))
                {
                    Userinfo model = Userinfo.Getmodel(username,password);
                    if (model != null)
                    {
                        HttpContext.Current.Session["Users"] = model;
                        return true;
                    }
                }
            }
            return false;
        }

        /// <summary>
        /// 取得用户信息
        /// </summary>
        public static Userinfo GetUserInfo()
        {
            if (IsUserLogin())
            {
                Userinfo model = HttpContext.Current.Session["Users"] as Userinfo;
                if (model != null)
                {
                    //为了能查询到最新的用户信息
                    //model = UserInfo.GetModel(model.ID);//这种方法查询次数太多
                    //更新 直接session["Users"]=null;
                    return model;
                }
            }
            return null;
        }
        #endregion
    }

5.页面继承BaseBage,直接调用用户登录的实体类

   public partial class WebForm1 : BaseBage
    {
        protected string str="";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Model != null)
                {
                    username.Value = Model.Username;
                    str = Model.Username;
                }
            }
        }
    }

 6.突然发现以前的这种做法,low到尽头了,来块豆腐吧。

在修改以前的项目遇到的,权且记录一下。

 

你将独自前行,你会遇到友好,也会遇到恶意,不管你多么善良,因为世间就是这样,不好,不坏.
原文地址:https://www.cnblogs.com/jsdvkm/p/4555553.html