【1】:在项目中建立一个User文件夹,用于存放用户相关页面。在里面建立index.aspx,作为用户登陆的首页,然后把静态页面整合进去。
注意:弄好以后,运行会发现,里面的图片显示不出来,这是由于使用了相对路径,只需要在母版页中 把图片和超链接加入 runat="server"即可。
【2】:在网站首页中,添加登陆代码,登陆成功,则转向用户首页。
在UserDAO中添加一个登陆函数,Login(name,pwd),用于判断登陆用户是否存在。
//判断登陆用户是否存在 public bool Login(string name, string pwd) { Database db = DatabaseFactory.CreateDatabase(); StringBuilder strSql = new StringBuilder(); strSql.Append("select count(1) from Shop_user where username=@username and password=@password "); DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString()); db.AddInParameter(dbCommand, "username", DbType.String, name); db.AddInParameter(dbCommand, "password", DbType.String, pwd); int cmdresult; object obj = db.ExecuteScalar(dbCommand); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { cmdresult = 0; } else { cmdresult = int.Parse(obj.ToString()); } if (cmdresult == 0) { return false; } else { return true; } }
在网站主页的index的cs文件中:
//用户登陆 protected void lbtnlogin_Click(object sender, EventArgs e) { string name = txtname.Text.Trim(); string pwd = txtpwd.Text.Trim(); if (name.Length==0||pwd.Length==0) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "<script>alert('请把用户名或者密码输入完整!')</script>"); return; } bool islogin = new MyShop.DAL.UserDAO().Login(name,pwd); if (islogin) { Response.Redirect("User/index.aspx"); } else { Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "<script>alert('用户名或者密码错误!')</script>"); return; } }
【3】:个人资料管理:在User文件夹中建立myzl.aspx,用于管理个人资料
技术点:
1:在这里使用.NET票据认证,.NET会帮我们自动记录登陆的用户的用户名。
2:应该给User这个文件夹添加权限认证,这个文件夹中的页面只能由已经登陆的用户才能查看。我们想要的效果是只要是没有登陆过的用户,查看这个文件夹中的页面,网站会自动跳转到首页。
步骤:
第一步:修改Web.config,给目录验证加上权限。
这是原来的Web.config内容
然后再添加代码:
<location path="User"> <system.web> <authorization> <allow roles="user"/><!--允许使用User的角色--> <deny users="*"/> </authorization> </system.web> </location>
然后,再修改Web.config中的“登陆页”,把loginUrl=“admin/login.aspx”修改一下,
<!--登陆页--> <authentication mode="Forms"> <forms name="mycook" loginUrl="index.aspx" protection="All" path="/"/> </authentication>
这样,如果直接查看User目录里面的文件夹,就自动跳转到首页。
第二步:把login页登陆成功的那几句代码复制到网站首页的cs代码中:
把用户角色修改为:
string roles = "user";
//用户登陆 protected void lbtnlogin_Click(object sender, EventArgs e) { string name = txtname.Text.Trim(); string pwd = txtpwd.Text.Trim(); if (name.Length==0||pwd.Length==0) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "<script>alert('请把用户名或者密码输入完整!')</script>"); return; } bool islogin = new MyShop.DAL.UserDAO().Login(name,pwd); if (islogin) { HttpCookie cook; string strReturnURL; string roles = "user"; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1, name, DateTime.Now, DateTime.Now.AddMinutes(30), false, roles); cook = new HttpCookie("mycook"); cook.Value = FormsAuthentication.Encrypt(ticket); Response.Cookies.Add(cook); strReturnURL = Request.Params["ReturnUrl"]; if (strReturnURL != null) { Response.Redirect(strReturnURL); } else { Response.Redirect("User/index.aspx"); } } else { Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "<script>alert('用户名或者密码错误!')</script>"); return; } }
当加入票据认证以后,用户登陆后的用户名就会被保存在某个位置,可以使用 User.Identity.name获取用户名。
第三步:在个人资料页面,用Literal控件绑定用户名:
然后,在cs代码中获取用户名,并显示出来
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Web.User { public partial class myzl : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { litusername.Text = User.Identity.Name; } } } }
【4】: 现在,出现一个问题,由于Web.config页面中设置为 index.aspx,
<!--登陆页--> <authentication mode="Forms"> <forms name="mycook" loginUrl="login_direct.aspx" protection="All" path="/"/> </authentication>
这样的话,管理员登陆进不了admin目录中的页面了。
为此,我们建立一个登陆转向页面index_direct.aspx,然后把Web.config中的登陆页设置为这个页面,而在这个页面通过判断用户类型,来实现页面的跳转。
通过判断http://localhost:13520/index_direct.aspx?ReturnUrl=%2fadmin%2fdefault.aspx后面的ReturnUrl的值,来判断是登陆到User目录还是登陆到admin目录。
在网站主目录建立一个index_direct.aspx页面。然后写cs代码
把admin下的login的cs中的票据认证中的代码拷贝下来,修改一下就行了
index_direct.aspx中修改后的cs代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Web { public partial class index_direct : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string strReturnURL = Request.Params["ReturnUrl"];//取出ReturnURL的值 if (strReturnURL != null && strReturnURL.Contains("admin"))//如果ReturnURL包含admin字符串,就跳转到admin目录 { Response.Redirect("admin/login.aspx?ReturnUrl"+strReturnURL); } else { Response.Redirect("index.aspx?ReturnUrl="+strReturnURL); } } } }
【5】:为超链接建立用户控件:在项目中新建一个文件夹control,用于存放用户控件,建立一个usertop.ascx,把超链接全复制进去,便于管理。
代码:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="usertop.ascx.cs" Inherits="Web.control.usertop" %> <a href="index.aspx"><strong> <img src="../images/dot_03.gif" width="9" height="9" border="0"> 首页</strong></a><strong> <a href="myinfo.html"> <img src="../images/dot_03.gif" width="9" height="9" border="0"> 我的信息</a>/<a href="myfavorite.aspx">收藏</a>/<a href="myintegral.aspx">积分</a>/<a href="myorder.aspx">订单</a> <a href="myzl.aspx"> <img src="../images/dot_03.gif" width="9" height="9" border="0"> 个人资料</a> <a href="modpass.aspx"> <img src="../images/dot_03.gif" width="9" height="9" border="0"> 修改密码</a><a href="viphd.aspx"><strong><img src="../images/dot_03.gif" width="9" height="9" border="0"> VIP活动</strong></a><strong><strong> <a href="viphd.aspx"><strong> <img src="../images/dot_03.gif" width="9" height="9" border="0"> </strong></a></strong><a href="vipsq.html">申请VIP</a><strong> <strong><a href="logout.asp"> <strong> <img src="../images/dot_03.gif" width="9" height="9" border="0"> </strong></a></strong><a href="../index.aspx">退出</a></strong></strong></strong>