做一个登录页,想要保存用户的密码,这样就不用每次都输入密码了,比较方便, 刚接触cookie,不太懂,自己折腾了
两天,终于弄出个简单的出来,不过还没有给cookie加密,后期再补上吧。下面是代码 ,记在这里,以防自己以后忘记。
1.Login.aspx代码 :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>无标题页</title> </head> <body> <form id="form1" runat="server"> <div> 用户名:<asp:TextBox runat="server" ID="txtUserName"></asp:TextBox> <asp:RequiredFieldValidator runat="server" ID="rfvUserName" ControlToValidate="txtUserName" ErrorMessage="用户账号不能为空,请输入您的用户账号!"></asp:RequiredFieldValidator> <br/> 密码:<asp:TextBox runat="server" ID="txtPassword" TextMode="Password"></asp:TextBox> <asp:RequiredFieldValidator runat="server" ID="rfvPassword" ControlToValidate="txtPassword" ErrorMessage="用户密码不能为空,请输入您的密码!" Display="Dynamic"></asp:RequiredFieldValidator> <br/> <asp:CheckBox ID="SavePwd" runat="server" Text="保存密码" /> <br/> <asp:Button runat="server" ID="btnLogin" Text="登录" onclick="btnLogin_Click"/> <br /> </div> </form> </body> </html>
2.Login.aspx.cs代码:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using ESchool.BLL;
using ESchool.Entity;
using System.Collections.Generic;
using System.Data;
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//读取cookiek 保存的用户信息值
if (Request.Cookies["LoginInfo"] != null)
{
//将本地保存的用户名写入页面的对应的textbox中。
this.txtUserName.Text = Request.Cookies["LoginInfo"]["userName"];
//将本地保存的用户密码名写入页面的对应的textbox中。
this.txtPassword.Attributes.Add("value", Request.Cookies["LoginInfo"]["userPassword"].ToString());
//或
//System.Collections.Specialized.NameValueCollection UserInfoCookieCollection;
//UserInfoCookieCollection = Request.Cookies["LoginInfo"].Values;
//this.txtUserName.Text =
// Server.HtmlEncode(UserInfoCookieCollection["userName"]);
//this.txtPassword.Text =
// Server.HtmlEncode(UserInfoCookieCollection["userPassword"]);
}
}
}
protected void btnLogin_Click(object sender, EventArgs e)
{
//将用户名保存到 cookie
Response.Cookies["LoginInfo"]["userName"] = this.txtUserName.Text.Trim();
//判断是否将密码保存到 cookie
if (SavePwd.Checked)
{
Response.Cookies["LoginInfo"]["userPassword"] = this.txtPassword.Text.Trim();
}
//密码保存时间
Response.Cookies["LoginInfo"].Expires = DateTime.Now.AddMinutes(2);
//或
//HttpCookie userCookie = new HttpCookie("LoginInfo");
//userCookie.Values["userName"] = this.txtUserName.Text.Trim();
//if (this.SavePwd.Checked)
//{
// userCookie.Values["userPassword"] = this.txtPassword.Text.Trim();
//}
//userCookie.Expires = DateTime.Now.AddDays(2);
//Response.Cookies.Add(userCookie);
}
}
写这个的时候也遇到了不少问题,首先就是在第一次运行时,保存密码后再次进入这个页面时,发现密码没有保存,
只保存了用户名,以为自己代码有错呢,检查了半天,也上网查了好多,发现没有什么不妥的。几经折腾,在一步一步调试中发现了问题,保存用户名和密码的语句是一样的,能保存用户名就应该保存密码,那么能读出用户名也就应该能读出密码,调试到
//将本地保存的用户密码名写入页面的对应的textbox中。
this.txtPassword.Attributes.Add("value", Request.Cookies["LoginInfo"]["userPassword"].ToString());
时,发现,密码已经读出来了,可是为什么不能显示在文本框中???纳闷了,看了网上一些资料,发现了好多 人都有这样的问题。
问题在于TextMode="Password",这样的话就会把cookie中读出来密码给屏蔽掉,造成不显示密码。
//将本地保存的用户名写入页面的对应的textbox中。
this.txtUserName.Text = Request.Cookies["LoginInfo"]["userName"];
//将本地保存的用户密码名写入页面的对应的textbox中。
this.txtPassword.Attributes.Add("value", Request.Cookies["LoginInfo"]["userPassword"].ToString());
把显示密码的语句改成上面的形式就可以显示密码了,还没有完全搞清楚 为什么要这样写。研究中,希望我的这些
能对大家有点帮助。
原文出处:http://m.blog.csdn.net/itmaxin/article/details/7667201








网友评论