|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。</p>做用户登录,我一向用form考证的体例。偶然候,为了节俭工夫,用户但愿用户名输出框可以记着用户名,免得下次从头输出。这个时分光用form考证是不可的,由于form考证的话,用户一加入体系就生效了,以是必要借助于Cookie。
本觉得做这个会很轻松,谁知花了很多工夫也没有乐成。固然查验用户名和暗码都是准确的,但体系老是回绝登录,然后前往到登录页面。登录页面的用户名输出框记是记着用户名了,但用户名是乱码的。
真是忧郁至极!一度觉得体系产生了庞杂,重启呆板也仍是杯水车薪。经重复反省和测试发明,假如在form考证之前写进cookies,就会回绝登录。这多是asp.net出于平安思索,发明了一个与from标知趣同的cookies值,可是它没有明白地如许提醒。
办理这个成绩的做法是,要先考证登录再把用户名写进cookies,如许就能够乐成。
以下为援用的内容:
System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text,false);//登录...
//将用户名写进cookies
Response.Cookies["RememberMe"].Value=HttpUtility.UrlEncode(UserName.Text,System.Text.Encoding.GetEncoding("gb2312"));
Response.Cookies["RememberMe"].Expires=DateTime.Now.AddMonths(1);
至于输出框的用户名显现为乱码是由于存储的是中文用户名,把中笔墨符写进cookies时,假如不做任那边理是会临盆乱码的。办理办法是如下面白色代码所示,在写进的时分利用url编码,并且编码格局必要是中文格局的。在获得cookies值的时分做响应的解码便可:
以下为援用的内容:
UserName.Text=HttpUtility.UrlDecode(Request.Cookies["RememberMe"].Value,System.Text.Encoding.GetEncoding("gb2312"));
另外一个成绩是删除cookies,之前一向觉得用Response.Cookies.Remove(“RememberMe”)能够删除,但就是没无效果。本来挪用Cookies汇合的Remove办法可从服务器真个汇合中移除Cookie,使Cookie不会被发送至客户端。可是,假如客户端已存在Cookie,则该办法没法从客户端将其移除。办理办法是,将Cookie的到期日期设置为已往的日期,让用户的扫瞄器来删除Cookie:
以下为援用的内容:
if(Response.Cookies["RememberMe"]!=null)Response.Cookies["RememberMe"].Expires=DateTime.Now.AddDays(-1);//删除
最初一个成绩是创立扫瞄器历程的cookies(即封闭扫瞄器就会主动清空),创立办法相称复杂,不要设置Expires属性就是默许的扫瞄器历程cookies。
开头附上关头部分的代码:
以下为援用的内容:
System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text,false);//登录,必定要先考证
if(RememberMe.Checked)//再写进cookie
{
if(Request.Cookies["RememberMe"]==null)
{
Response.Cookies["RememberMe"].Value=HttpUtility.UrlEncode(UserName.Text,System.Text.Encoding.GetEncoding("gb2312"));
Response.Cookies["RememberMe"].Expires=DateTime.Now.AddMonths(1);
}
}
else
{
if(Response.Cookies["RememberMe"]!=null)Response.Cookies["RememberMe"].Expires=DateTime.Now.AddDays(-1);//删除
}
读取cookies值的时分:
以下为援用的内容:
if(!IsPostBack)
{
if(Request.Cookies["RememberMe"]!=null)
{
UserName.Text=HttpUtility.UrlDecode(Request.Cookies["RememberMe"].Value,System.Text.Encoding.GetEncoding("gb2312"));
RememberMe.Checked=true;
}
}
总结一下:
1.写一个与form考证不异用户名的值到cookies中,应当先考证后写cookies,不然会发生抵触,招致考证不克不及经由过程。
2.删除cookie的准确办法是设置已有cookies的日期为早于以后工夫的日期,利用Cookies.Remove是没无效果的。
3.创立扫瞄器历程的cookies,不要设置Expires属性就好了,如许封闭扫瞄器就会主动被清空
4.cookies值是中文的时分最好用gb2312编码一下,如许能够制止发生乱码。
其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。 |
|