JavaWeb基础知识day10——Cookie和HttpSession

会话技术

    当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话.        
作用:
    因为http协议是一个无状态的协议,它记录不了上次访问的内容.用户在访问过程中难免会产生一些数据,通过会话技术就可以将起保存起来.
    例如:
        用户登录
        购物车
        访问记录
        .....

分类:

    cookie:浏览器端会话技术
    session:服务器端会话技术



Cookie【javax.servlet.http.Cookie

    翻译为:小饼干 小甜点
    cookie是由服务器生成[服务端创建Cookie:Cookie cookie = new Cookie();],通过response将cookie写回浏览器(set-cookie).[写回浏览器:response.adddCookie(cookie);],保留在浏览器上,下一次访问,浏览器根据一定的规则携带不同的cookie(通过request的头 cookie),我们服务器就可以接收cookie
    cookie的api:
        构造方法:new Cookie(String key,String value)
    写回浏览器:
        response.addCookie(Cookie c)
    获取cookie:
        Cookie[] request.getCookies()

获取指定名称的cookie
Cookie c=CookUtils.getCookieByName("lastTime",
request.getCookies());

//获取指定Cookie的工具类
public class CookUtils {
/**
 * 通过名称在cookie数组获取指定的cookie
 * @param name cookie名称
 * @param cookies  cookie数组
 * @return
 */
	public static Cookie getCookieByName(String name, Cookie[] cookies) {
		if(cookies!=null){
			for (Cookie cookie : cookies) {
				//通过名称获取
				if(name.equals(cookie.getName())){
					//返回
					return cookie;
				}
			}
		}
		return null;
	}
}


cookie的常用方法:
        String getName():获取cookie的key(名称)
        String getValue():获取指定cookie的值
        setMaxAge(int 秒):设置cookie在浏览器端存活时间  以秒为单位
            若设置成 0:删除该cookie(前提必须path路径一致)
        setPath(String path):设置cookie的路径.
            作用:当我们访问的路径中包含此cookie的path,则携带该cookie。
        默认路径: 
            访问serlvet的路径,从"/项目名称"开始,到最后一个"/"结束
            例如:
                访问的serlvet路径:
                    /day11/a/b/hello
                默认路径为:
                    /day11/a/b
        手动设置路径:以"/项目名"开始,以"/"结尾;
扩展:删除浏览记录
技术分析:
    cookie.setMaxAge(0)

注意:
    cookie不能跨浏览器
    cookie中不支持中文



HttpSession

session【HttpSession】:服务器端会话技术.
    当我们第一次访问服务器的时候,服务器获取id【jsessionid】,
        能获取id
            要拿着这个id去服务器中查找有无此session
                若查找到了:直接拿过来使用,将数据保存,需要将当前sessin的id返回给浏览器
                若查找不到:创建一个session,将你的数据保存到这个session中,将当前session的id返回给浏览器
        不能获取id
            创建一个session,将你的数据保存到这个session中,将当前session的id返回给浏览器
    【session依赖于cookie】
    浏览器访问服务器,服务器获取jsessionid
        若获取不到
            创建一个sesion,将数据保存,将当前session的jsessionid通过cookie返回浏览器
        若获取到
            拿着该jsessionid去session池中查找有无该session
                若查找到:
                    直接拿过来使用,将jsessionid写回浏览器
                若查找不到
                    创建一个sesion,将数据保存,将当前session的jsessionid通过cookie返回浏览器

获取一个session:
    HttpSession  request.getSession()
域对象:
    xxxAttribute--(setAttribute|getAttribute|removeAttribute)
    void setAttribute(String name, Object value):新增
    Object getAttribute(String name) :获取
    void removeAttribute(String name) :移除
     void setMaxInactiveInterval(int interval) :设置过期时间
    void invalidate():移除session
     ServletContext getServletContext() 


生命周期:
        创建:第一次调用request.getsession()创建(java代码中这样认为,jsp页面时一访问就创建)
        销毁:
            1.服务器非正常关闭
            2.session超时
                2.1.默认时间超时:30分钟  Tomcat服务器web.xml有配置 

                   
                      30
                 

                2.2.手动设置超时:session.setMaxInactiveInterval(int 秒) 
            3.手动删除session
                ★HttpSession session = request.getSession();

                ★session.invalidate();
作用:
    存放的是私有的数据.

你可能感兴趣的:(java基础,Java开发,JavaWeb)