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到尽头了,来块豆腐吧。
在修改以前的项目遇到的,权且记录一下。