java cookies session 的思考。

本文详细阐述了如何使用会话(session)在HTTP环境中存储数据,包括创建、获取和销毁过程。同时,提供了利用Cookie检测网页登录状态的方法,并讨论了网页刷新时保持登录状态的实现策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值