我的需求是这样的,之前用session保存用户的登录信息,但是由于偶然有出现一登录就提示会话消失,无论点击哪个模块都出现这种情况,web.xml配置的session时间是360000,只是偶然才出现这种情况,可能五百次登陆会出现一两次这样的情况,客户对此不满意,所以,想改用cookie记录会话,不知cookie的设置时候和sesion差不多?原来用session的时候,是判断用户登陆成功才写进session,如if(success)session.setAttribute("UserBean",UserBean),然后再写一个专门验证session是否过期的jsp页面,然后,被include进很多页面,内容就是判断session是否为空,如果不为空,就从session里面取出用户信息,
现在改用cookie来设置,怎么实现?
现在改用cookie来设置,怎么实现?
我也纳闷啊,即使是出现这种情况很少,客户不满意啊登陆五百次会出现一两次这样。想改用 cookie来做了,是不是也是把loginId记下来,传入cookie构造器?如
Cookie myCookie=new Cookie("loginId",loginId);
cookie.setMaxAge(360000);
response.addCookie(cookie); 然后在验证页面怎么判断??Cookie cookies[]=request.getCookies();
Cookie sCookie=null;
String svalue=null;
String sname=null;
for(int i=0;i<cookies.length;i++)
{
sCookie=cookies[i];
svalue=sCookie.getValue();
sname=sCookie.getName();
}
if(怎么样判断cookie过期??)
......
session超时倒时好理解,session丢失的概率太小了吧。
如果是客户感觉到session丢失的话,我想概率应该不小了。
你说的这种校验方式和我之前用的很像,理论上是可行(虽然不优雅)
我可以断定,是缓冲或者代理服务器的问题。登录结果被缓冲了,并没有真正去服务器验证,后面当然就失效了。解决方法,在文件前面加上<%
request.setCharacterEncoding("GBK");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
%>
<%!// return current time to proxy server request
@Override
public long getLastModified(@SuppressWarnings("unused")
HttpServletRequest request) {
return System.currentTimeMillis();
}%>具体的解释你自己找吧...
再从安全角度来说,建议楼主用session.
if(request.getSession(false)==null){
ErrorUtil.Show("对不起,您与服务器的会话已结束,请重新登录系统!");
}else{
UserBean user=session.getAttribute("user");
.....进行相关操作.......
}
由于出现"对不起,您与服务器的会话已结束,请重新登录系统!"这些提示,那么肯定说明了session取不到值了,这如何是好??
紫竹老大,你那个方法不是1.4来的吧?
如果session为空,在判断cookie,不知cookie是在哪个包里面啊?