session
属于会话级别存储数据, 每一次与服务器的会话就会创建唯一的session, 生成周期随着会话的结束而关闭,(会话:指的是一个客户端,用一个浏览器访问服务器,不同浏览器,不会客户端创建的session 是不一样的,保证了session 的唯一性),session 随着浏览器的关闭而消失, 或者服务器重启,session 也会消失。会进行重新创建。
创建
HttpSession session = request.getSession();
session.setAttribute("name", "mark_xie");
获取
String sessionName = (String)request.getSession().getAttribute("name");
if(sessionName != null && !sessionName.equals("")){
System.out.println("name:" + sessionName);
}
一般可以将获取的操作放在 BaseController 父类方法里面。
cookie 检测网页登录状态的解决方案:
server:
Cookie cookie1 = new Cookie("login","true");
cookie1.setMaxAge(-1); //关闭浏览器消失
cookie1.setPath("/");
response.addCookie(cookie1);
html:
function getCookie(name){
alert(name);
var strCookie=document.cookie;
var arrCookie=strCookie.split("; ");
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
if(arr[0]==name)
{
// 检测到登录状态为true, 再从cookie中遍历用户名等信息,更改网页的上的显示。
return arr[1];
}
}
return "";
}
服务器端获取cookies 的通用:读取cookie的时候,为了方便我们的操作,我们希望封装一个函数,只要我们提供cookie的name,我们便可以获取cookie的value,带着这个想法,很容易想到将cookie封装到Map里面,于是进行下面的封装
/**
* 根据名字获取cookie
* @param request
* @param name cookie名字
* @return
*/
public static Cookie getCookieByName(HttpServletRequest request,String name){
Map<String,Cookie> cookieMap = ReadCookieMap(request);
if(cookieMap.containsKey(name)){
Cookie cookie = (Cookie)cookieMap.get(name);
return cookie;
}else{
return null;
}
}
/**
* 将cookie封装到Map里面
* @param request
* @return
*/
private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){
Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
Cookie[] cookies = request.getCookies();
if(null!=cookies){
for(Cookie cookie : cookies){
cookieMap.put(cookie.getName(), cookie);
}
}
return cookieMap;
}
关于网页 刷新检测页面登陆状态的解决方案:
1, 每次从登录页面登录成功,往客户端写入一个cookie ,判断登陆状态。
Cookie cookie = new Cookie("LoginCookie","cookievalue");
Cookie cookie1 = new Cookie("login","true");
cookie1.setMaxAge(-1); //关闭浏览器消失
response.addCookie(cookie1);
2, 页面的写一段js,去检测客户端的cookie, 如果存在
var cookie_login = get_cookie("LoginCookie");
if(cookie_login != null && cookie_login != ''){
//登陆成功,获取用户name, role 等其他cookie 信息,以显示
}
else
{
//登陆失败,或者退出登录, 还原页面。
}
则执行页面的相关元素的替换,反之则保持不变。
如此即使解决网页刷新登录的解决方案
参考博客:
http://www.cnblogs.com/xdp-gacl/p/3855702.html