zoukankan      html  css  js  c++  java
  • 修改以前项目遇到,所有页面继承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到尽头了,来块豆腐吧。

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

     

    你将独自前行,你会遇到友好,也会遇到恶意,不管你多么善良,因为世间就是这样,不好,不坏.
  • 相关阅读:
    Fiddler filter 过滤隐藏css、js、图片等
    十三、单元测试
    十二、文件操作
    Go_客户信息管理系统
    十一、面向对象编程_下
    十、面向对象编程_上
    九、map
    八、排序和查找
    七、数组和切片
    六、函数、包和错误处理
  • 原文地址:https://www.cnblogs.com/jsdvkm/p/4555553.html
Copyright © 2011-2022 走看看