博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 用Cookie实现web的自动登录
阅读量:2386 次
发布时间:2019-05-10

本文共 2133 字,大约阅读时间需要 7 分钟。

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

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

Cookie cookie 
=
 
new
 Cookie(
"
user
"
user);
cookie.setMaxAge(
365
 
*
 
24
 
*
 
3600
);
cookie.setPath(
"
/
"
);
response.addCookie(cookie);
    当用户再次访问程序时,服务端程序应该检测这个
Cookie
是否存在,代码如下:
Cookie[] cookies
=
request.getCookies();
for
(Cookie cookie: cookies)
{
    if
(cookie.getName().equals(user))
    {
       
//
 如果user Cookie存在,进行处理
       
break
;
    }
}
    尽管从客户端可以获得
User Cookie
,但这上
Cookie
可能存在很长时间,而且仅凭这个
Cookie
就自动登录并不安全,因此,可以在服务端使用一个
Session
来管理用户。也就是当第一次登录成功后,就创建一个
Session
,并将用户的某些信息保存在
Session
顺。代码如下:
HttpSession session 
=
request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(
2
 
*
 
3600
);  
//
 Session保存两小时
    
当再次访问程序时,确定了
cookie
存在后,就会继续验证
User Session
的存在,代码如下:
Cookie[] cookies
=
request.getCookies();
for
(Cookie cookie: cookies)
{
    if
(cookie.getName().equals(user))
    {
       
if
(session.getAttribute(user) 
!=
 
null
)
        {
           
//
 直接forward到主界面
          
break
;
        }
        else
       
           
//
 forward到登录界面
         }
     }
}
    虽然上面的代码可以很好地实现自动登录功能,但是当浏览器关闭,再次启动后,由于
Servlet
用于保存
Session ID
JSESSIONID Cookie
是临时的(也就是说不是持久
Cookie
,当浏览器关闭后,这个
Cookie
就会被删除),因此,需要将
JSESSIONID
进行持久化。代码如下:
HttpSession session 
=
 request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(
2
 
*
 
3600
);  
//
 Session保存两小时
Cookie cookie 
=
 
new
 Cookie(
"
JSESSIONID
"
session.getId());
cookie.setMaxAge(
2
 
*
 
3600
);  
//
 客户端的JSESSIONID也保存两小时
session.setMaxInactiveInterval(interval)
cookie.setPath(
"
/
"
);        
response.addCookie(cookie);

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

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

Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web

Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web

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

Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web1

Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web2

转载地址:http://hljab.baihongyu.com/

你可能感兴趣的文章
ceph集群的扩展(centos7环境)
查看>>
linux命令之top(查看cpu、内存等负载)
查看>>
linux_详解find命令
查看>>
openstack的swift组件详解
查看>>
两大主流开源分布式存储的对比:GlusterFS vs. Ceph
查看>>
面试笔试动态规划问题--python篇
查看>>
linux下的svn常用命令使用指南
查看>>
阿里云iot事业部一面面经
查看>>
《云计算架构技术与实践》
查看>>
《云计算架构技术与实践》序言(李德毅院士)
查看>>
《云计算架构技术与实践》连载(2):1.2 云计算的发展趋势
查看>>
《跨界杂谈》企业商业模式(七):其他
查看>>
STL介绍 - map
查看>>
ssh 命令的用法
查看>>
scp 命令的用法
查看>>
ldcofig 命令的用法
查看>>
tar 命令的用法
查看>>
mount 命令的用法
查看>>
fdisk 命令的用法
查看>>
ln 命令的用法
查看>>