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