仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1111|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之ASP.NET教程:form考证用户登录的Cookie...

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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快。
老尸 该用户已被删除
沙发
发表于 2015-1-17 19:23:25 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
兰色精灵 该用户已被删除
板凳
发表于 2015-1-21 07:46:02 来自手机 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
活着的死人 该用户已被删除
地板
发表于 2015-1-30 11:47:31 | 只看该作者
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
精灵巫婆 该用户已被删除
5#
 楼主| 发表于 2015-2-6 11:04:54 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
因胸联盟 该用户已被删除
6#
发表于 2015-3-11 20:51:17 | 只看该作者
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
不帅 该用户已被删除
7#
发表于 2015-3-19 12:55:14 | 只看该作者
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-28 04:14:37 | 只看该作者
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-19 06:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表