cookie自动登录java_Cookie和Session的使用——登录、自动登录、注销登录(实例)...

本文介绍了在Java中利用Cookie和Session实现登录状态管理。包括登录时将用户信息存入Session,设置Cookie保持登录状态,过滤器中自动登录的处理,以及注销登录时清理Session和Cookie的操作。同时,还提及了登录、注销后跳转到之前页面的实现策略。
摘要由CSDN通过智能技术生成

登录用户(使用session在页面判断)

验证用户提交的登录信息后,如何在后续页面判断登录状态(以控制访问权限等),这里使用session变量来表示登录状态。登录成功后,将用户信息封装起来(这里使用的是一个javabean)存放到session中。在需要进行权限登录验证的页面通过获取该session标记“loginUser”来判断是否是登录状态。request.getSession().setAttribute("loginUser",loginUser);

本项目中,在每个页面右上角都会显示登录和注册选项,当用户处于登录状态时会显示用户名的信息。当然该部分用include标签简化(分块设计,在页面分块设计中有相关说明),使用仅用设置一处即可。判断登录状态的核心代码(jstl方式)如下:

非登录状态显示的信息

登录状态显示的信息

其中islogin是在页面中判断登录标志Javabean(loginUser)是否为空来说明的一个标志字段。

设置自动登录(登录时写入cookie)

自动登录是通过在用户通过账号、密码登录是,是在cookie来实现的。为了让用户感觉不到登录的过程,本项目采用的是在在过滤器(filter)中判断是否满足自动登录条件,若满足便自动登录。具体实现是设置表示用户信息的唯一编码(本项目中使用用户唯一id及用户名加上干扰字符生成的字符串)到cookie,每次访问请求在判断登录标志为空的情况下继续判断cookie的信息是否有满足自动登录的项。并对信息进行处理确保登录用户的有效性。在信息验证成功后,要对登录标志进行相应的处理(将loginUser写入cookie中)。

下面是保存cookie信息的核心部分:

//设置cookie保持登录状态

//对用户信息编码(用户名和id)在非登录状态进行自动登录处理。

String value="msg_ic"+loginUser.getMnumber()+"msg_ic"+loginUser.getMname()+"msg_ic";

Cookie cookie = new Cookie(URLEncoder.encode("idvaluename"),URLEncoder.encode(value));

cookie.setMaxAge(60*60*24*7);//保存用户cookie7天

cookie.setPath("/graduation_project");//设置有效范围

response.addCookie(cookie);

下面是在过滤器中提取相关信息实现自动登录的核心思路(对登录状态以及cookie中保存的信息编码(idvaluename)的获取这里不再进行说明):

int mnumber=Integer.parseInt(idvaluename.split("msg_ic")[1]);//对字符串拆分,获取id和用户名

String mname=idvaluename.split("msg_ic")[2];

//上述信息验证成功,登录成功后设置session变量,在每个页面使用(检测登录状态等)

MemberDao memberDao=new MemberDao();

MemberOutInfo loginUser=memberDao.getmemberOutInfoByMnumberAndMname(mnumber,mname);

if(loginUser!=null){ //验证cookie中的信息是否正确

req.getSession().setAttribute("loginUser",loginUser);

}

注销登录(清除cookie以及session域的标识Javabean)

注销登录即对登录标志(loginUser)、cookie中自动登录字段(idvaluename)进行处理。使当前用户,即客户端(因为自动登录的使用,所以这里使用客户端的“非登录状态”)处于非登录状态。

//移除用来标志登录的session变量loginUser

request.getSession().removeAttribute("loginUser");

//移除自动登录的cookie变量idvaluename

//注销该会话

request.getSession().invalidate();

//注销cookie(通过设置过期时间为0)

Cookie cookie = new Cookie(URLEncoder.encode("idvaluename"),"0");

cookie.setMaxAge(0);//设置有效期0即删除cookie

cookie.setPath("/graduation_project");

response.addCookie(cookie);

登录、注销、注册后跳转到之前的页面

这里在每次请求(除登录、注销、注册操作)时设置session变量(reurl)保存请求的url,这样在进行登录、注销、注册后就可以获取相应的session变量(reurl)来跳转到最后请求的url。这样做的一个好处是,无需在登录、注销、注册页面设置相应的跳转参数(这样做同样是繁琐的,对于转发的请求可以会带来一些新的问题)即可以跳转到之前的访问页面

//获取session变量,将要跳转的位置

String gotourl=request.getSession().getAttribute("reurl").toString();

if(gotourl==null)gotourl="/graduation_project/"; //设置默认的跳转页面

try {

response.sendRedirect(gotourl);

} catch (IOException e) { e.printStackTrace();

}

使用cookie保存登录信息(最后一次登录时间,ip等)

只需要在每次请求对相应的cookie进行设置即可。

这里仅提供一种通过System类中的currentTimeMillis方法来获取当前时间的方法:SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   System.out.println(df.format(System.currentTimeMillis()));

对于获取ip的方法,这里不再进行说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值