自定义Asp.Net程序Cookie值和Session值的有效时间

文/nokiaguy  出处/博客园

有很多Web程序中第一次登录后,在一定时间内(如2个小时)再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。实现这个功能关键就是服务端要识别客户的身份。而用Cookie是最简单的身从验证。

如果用户第一次登录,可以将用户名作为Cookie写到本地,代码如下:

Code


当用户再次访问程序时,服务端程序应该检测这个Cookie是否存在,代码如下:

Code


尽管从客户端可以获得User Cookie,但这个Cookie可能存在很长时间,而且仅凭这个Cookie就自动登录并不安全,因此,可以在服务端使用一个Session来管理用户。也就是当第一次登录成功后,就创建一个Session,并将用户的某些信息保存在Session顺。代码如下:

Code


当再次访问程序时,确定了cookie存在后,就会继续验证User Session的存在,代码如下:

Code


虽然上面的代码可以很好地实现自动登录功能,但是当浏览器关闭,再次启动后,由于Servlet用于保存Session ID的JSESSIONID Cookie是临时的(也就是说不是持久Cookie,当浏览器关闭后,这个Cookie就会被删除),因此,需要将JSESSIONID进行持久化。代码如下:

Code


如果使用上面的代码,即使浏览器关闭,在两小时之内,Web程序仍然可以自动登录。

如果我们自已加一个JSESSIONID Cookie,在第一次访问Web程序时,HTTP响应头有两个JSESSIONID,但由于这两个JSESSIONID的值完全一样,因此,并没有任何影响。如果在响应头的Set-Cookie字段中有多个相同的Cookie,则按着path和name进行比较,如果这两个值相同,则认为是同一个Cookie,最后一个出现的Cookie将覆盖前面相同的Cookie,如下面的两个Cookie,最后一个将覆盖前一个:

Code


由于下面两个Cookie的path不同,因此,它们是完全不同的两个Cookie:

Code




 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Asp.Net] 的这些文章也感兴趣:

利用ASP.NET技术动态生成HTML页面
c#.net常用函数和方法集
ASP.NET上传文件到数据库
Asp.net 页面导航的几种方法与比较
小心使用放在App_Code中类的静态成员
VS.NET 2005 Beta2初体验(4)-Notification控件
针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试
c#中的interface abstract与virtual
asp.net域名查询
asp向asp.net应用程序的转变过程