对于ASP.NET Forms验证,想必大家都非常的熟悉。然而,在控制用户的(过期时间)expired time的时候,你是否遇到过一些奇怪的现象呢?虽说只是一个小小的cookie,但是其中可能有很多的东西你都不知道。今天我将和大家详细讨论一下cookie的注意点。
在ASP.NET 的Forms验证中,通常我们会使用ASP.NET自带的Login控件来进行验证。同时,在web.config文件中,我们所有的Forms设置都设为默认。现在,问题就来了。
1) 为什么我明明点了"Remember me",而大概半个小时后,我又Log out了?
2) 为什么我明明设置了timeout为无限期 e.g. 400000,为什么一两天之后我又Log out了呢?
这是Forms验证中遇到的比较多的问题。下面,我就这两个问题做一个详细的解释:
对于问题一,首先我要阐明ticket和cookie的区别。cookie是一个容器,用来存放东西,它是保存在客户端的。而ticket是具体的数据,用来表示具体的验证信息,它是放在cookie这个容器中的。因而,在我们验证的过程中,以下事情发生了。首先,ticket被创造了,里面包含着用户名等信息,同时它有一个过期时间。然后,cookie被创造了,它同样也有一个过期时间。最后,将ticket保存在cookie中,并将此cookie发送到client的浏览器中。读到这里,我想问题已经很明白了,用户的Log out就是因为时间过期的问题。但具体是谁的时间过期了呢?在我们ASP.NET web.config的设置中,timeout是cookie的过期时间(注意,默认是30分钟),而ticket的过期时间是无限的,因为我们选了"Remember me"。这就是为什么虽然我点了"Remember me",但在30分钟左右后,我仍然被Log out了,因为我们并没有设置cookie的timeout。ticket和cookie,只要其中之一不是永远不过期,我们都无法实现永不过期。
当我们解决了问题一后(假如手动设置timeout="4000000"),我们又遇到了问题二。这又是什么原因呢?这得从ticket的加密解密机制说起。ASP.NET会使用一个machinekey来对cookie进行加密,这个machinekey默认是在application启动时随机生成的。然后,ASP.NET会使用同一个machinekey进行cookie进行解密。正式因为这个key是application启动时随机生成的才导致了问题二。试想,如果application recycle(重启)了怎么办?ASP.NET会生成另一个key进行解密,以前的cookie将不再有效,这就是问题二的原因了。知道了这个,解决第二个问题的办法就很简单了,手动设置一个特定的key。如:
<machineKey validationKey="88CB6CA6CF403C5FBB41C2F62BB7FCFCA05DE7BE" decryptionKey="B8A7CF3816C57176" validation="SHA1" />
P.S. 网上也有些随机生成key的站点,如:http://www.aspnetresources.com/tools/keycreator.aspx.
看到这里,大家是不是对Forms验证cookie有新的了解呢
转自:http://www.cnblogs.com/David-Qian/archive/2009/01/20/1378949.html
分享到:
相关推荐
《完全手册:ASP.NET 2.0网络开发详解》是一本深入探讨ASP.NET 2.0框架下网络应用开发的专业指南。这本书旨在帮助开发者全面掌握ASP.NET 2.0技术,构建高效、稳定的Web应用程序。 ASP.NET是微软.NET Framework的...
8. **状态管理**:ASP.NET 2.0提供了多种状态管理选项,如视图状态、控制状态、会话状态和cookie,以确保在页面回发期间保留数据。 9. **AJAX支持**:虽然ASP.NET 2.0本身不包含完整的AJAX框架,但可以通过...
6. **状态管理**:ASP.NET 2.0提供了多种状态管理机制,包括视图状态(ViewState)、控制状态(ControlState)、隐藏字段、Cookie、Session、Application等,以维护用户交互过程中的数据。 7. **页面生命周期**:理解...
1. **页面生命周期**:ASP.NET 2.0中的页面生命周期包括初始化、加载、验证、呈现和卸载等阶段。理解每个阶段的作用对于优化代码和处理用户输入至关重要。 2. **控件事件**:ASP.NET 2.0 提供了大量的服务器控件,...
【ASP.NET 2.0 知识点详解】 ASP.NET 2.0 是微软公司推出的一种基于.NET ..."VCG_asp.net 2.0_asp.net2.0_www.vcg.c"这个标签可能是指这个组件是与VCG网站(www.vcg.c)相关的,专门用于ASP.NET 2.0环境下的验证服务。
《圣殿祭司的ASP.NET 2.0开发详解——使用C#》是一部专注于ASP.NET 2.0技术的开发指南,由台湾作者撰写,针对C#编程语言进行了深入浅出的讲解。这本书旨在帮助开发者全面掌握ASP.NET 2.0平台下的Web应用程序开发技能...
6. 状态管理:ASP.NET 2.0提供了多种状态管理机制,如ViewState、Session、Cookie等,用于在页面间保持数据。理解如何有效地使用这些机制是防止数据丢失和提高性能的关键。 7. 部署和配置:学习如何配置IIS服务器和...
《圣殿祭司的ASP.NET 2.0开发详解——使用C#》是一本深入浅出的编程指南,专为想要掌握ASP.NET 2.0技术的开发者设计。该书结合了理论与实践,详细讲解了ASP.NET 2.0框架的核心概念、组件以及C#语言的应用,旨在帮助...
《圣殿祭司的ASP.NET 2.0开发详解——使用C#》是一本深入探讨ASP.NET 2.0框架的开发指南,特别强调了使用C#编程语言的应用。本书旨在帮助开发者掌握ASP.NET 2.0的核心概念、工具和技术,以实现高效且功能丰富的Web...
《ASP.NET 2.0 经典范例详解》 ASP.NET 2.0是微软推出的强大Web应用程序开发框架,它极大地简化了Web应用的构建过程,并提供了丰富的功能和组件。这个经典范例集合,名为"WebSite1",旨在帮助学者深入理解和实践ASP...
**ASP.NET 2.0 Everyday 知识点详解** ASP.NET 2.0是微软公司推出的Web应用程序开发框架,它是.NET Framework的一部分,旨在简化Web应用的构建和维护。"ASP.NET 2.0 Everyday" 是一本针对这个版本的实用指南,帮助...
《圣殿祭司的ASP.NET 2.0开发详解——使用C#(第2版)》是一本深入探讨ASP.NET 2.0技术的专业书籍,它面向的是希望通过C#语言进行Web应用程序开发的学习者和开发者。这本书以清晰的逻辑和详实的案例,帮助读者掌握...
综上所述,"微软院校课程 Web应用开发——ASP.Net2.0课件"和"微软 ASP 课件"标签的内容,旨在教授和提升开发者使用ASP.NET 2.0构建Web应用程序的能力,涵盖从基础到高级的各种主题,是深入理解ASP.NET 2.0技术体系的...
**ASP.NET 2.0 高级编程(特别版)源代码详解** ASP.NET 2.0 是微软推出的一种用于构建动态网站、Web应用程序和Web服务的开发框架。它基于.NET Framework,为开发者提供了丰富的功能和强大的性能。本书《ASP.NET 2.0...
在这个“asp.net2.0网上书店”项目中,我们将深入探讨如何利用ASP.NET 2.0技术构建一个功能完善的在线书店平台。 首先,网上书店的核心功能包括用户管理、图书展示、购物车、订单处理和支付系统。在ASP.NET 2.0中,...
总结,"ASP.NET 2.0网络开发详解.教程.光盘"是一个全面介绍ASP.NET 2.0开发的资源,包含了大量的实践案例和详细讲解,适合初学者和有一定基础的开发者学习。通过深入学习和实践,你可以掌握构建高效、功能丰富的Web...
《Asp.net 2.0实现的图书馆管理系统详解》 图书馆管理系统是信息技术在图书管理领域的重要应用,它能够高效地管理图书信息、借阅记录、读者信息等,大大提升了图书馆的工作效率。本系统采用Asp.net 2.0技术进行开发...
### Wrox ASP.NET 2.0 入门经典:C#编程篇 #### 知识点概述 本书《Wrox ASP.NET 2.0 入门经典:C#编程篇》由Chris Hart、John Kauffman、David Sussman 和 Chris Ullman共同撰写,旨在为初学者提供一个全面学习ASP...
本教程“完全手册:ASP.NET 2.0网络开发详解”旨在深入讲解ASP.NET 2.0的核心概念和技术,帮助开发者掌握其强大的开发能力。 该教程可能涵盖以下知识点: 1. **ASP.NET 2.0基础**:介绍ASP.NET 2.0的基本架构,...
【ASP.NET 2.0 知识点详解】 ASP.NET 2.0 是微软公司推出的一种Web应用程序开发框架,它是.NET Framework的一部分,主要用于构建动态、数据驱动的Web应用。在这个"中小型企业网站"项目中,ASP.NET 2.0被选为开发...