Servlet技术 - Cookie与Session

#Cookie与Session ##会话使用web

  • 使用场景浏览器

    • 偏好记录
    • 自动登陆
    • 浏览记录
  • 原理安全

    • 客户端或者服务端保存用户数据

##Cookie与Session服务器

  • Cookie
    会话数据保存在浏览器客户端
  • Session 会话数据保存在服务端

#Cookie ##Cookie定义 某些网站为了辨别用户身份,存储在用户本地终端上的数据cookie

  • 会话数据
  • 保存在客户端
  • Key-Value形式数据

##Cookie工做流程 ###第一次访问session

  • 1 客户端浏览器向服务器发送HTTP请求
  • 2 服务器根据须要生成cookie对象,并把一些数据保存在该cookie对象中
  • 3 服务器会把cookie对象放在http响应头中
  • 4 服务器发送HTTP响应给浏览器
  • 5 浏览器接收到HTTP响应,提出该cookie保存在浏览器端

###再次访问post

  • 1 客户端浏览器向服务器发送HTTP求取带有cookie对象
  • 2 服务器根据获取的cookie对象生成HTTP响应

输入图片说明

##Cookie生命周期网站

  • 默认会话结束后失效
    只要关闭浏览器窗口,Cookie就消失了。这种咱们叫作会话Cookie,会话Cookie咱们会保存在内存中,而不是硬盘上。
  • setMaxAge设置cookie有效期
    若是设置了Cookie的有效时间,则浏览器会把cookie保存在硬盘上。咱们关闭浏览器再次打开,这个Cookie依然有效,直到超过过时时间。

##Cookie的缺陷加密

  • 大小和数量限制
    通常来讲每一个站点可以保存20个Cookie,每一个Cookie通常限制在4K之内。
  • 数据安全性
    因为HTTP数据内容传送是明文传送,则有安全风险

##Cookie实例 请求页面code

<form method="post" action="user/specify">
        <p><input type="text" name="userName" value="" placeholder="username"></p>
        <p><input type="password" name="userPassword" value="" placeholder="password"></p>
        <p class="submit"><input type="submit" name="commit" value="submit"></p>
      </form>

UserServlet
注意:咱们在response对象中设置Cookie,示例中代码问题,咱们应当先判断request是否有Cookie,在给response添加cookie内容。

//Cookie初始化
Cookie userNameCookie = new Cookie("userName", userName);
		Cookie pwdCookie = new Cookie("pwd", userPassword);
                //过时时间
		userNameCookie.setMaxAge(10 * 60);
		pwdCookie.setMaxAge(10 * 60);

		response.addCookie(userNameCookie);
		response.addCookie(pwdCookie);

		Cookie[] cookies = request.getCookies();
		if (cookies != null) {
			for (Cookie cookie : cookies) {
				if (cookie.getName().equals("userName")) {
					userName = cookie.getValue();
				}
				if (cookie.getName().equals("pwd")) {
					userPassword = cookie.getValue();
				}
			}
		}

咱们在第一次请求输入用户名密码,关闭浏览器再次打开页面,并无输入用户名密码,也可以看到用户名密码信息内容。这是由于咱们在第一次请求时建立了Cookie对象,在第二次请求的时候,浏览器把Cookie发送给了服务器,服务器知道是这个用户,实现自动登陆。
经过Chrome查看Cookie对象
输入图片说明
输入图片说明

#Session ##Session特色

  • 保存在服务端

  • HttpSession
    用来保存用户的一些数据内容

  • 状态保存 ##Session工做原理

  • 1 浏览器发送HTTP请求到服务器端

  • 2 服务端会根据服务器请求,生成对应的Session对象,并给这个Session对象附上惟一的编号,服务器端把须要的数据记录到Session对象

  • 3 服务器端进行其余逻辑处理,而后把Session的惟一编号放到Cookie中

  • 4 服务器返回HTTP响应给浏览器

  • 5 浏览器端会把带有这个Session ID的Cookie记录在浏览器本地

  • 当下一次浏览器发送HTTP请求时,会把带有Session ID的Cookie发送给服务器

  • 服务器获取带有Session ID的Cookie,取出对应的Session ID,根据Session ID找到对应的Session对象

  • 当服务器辨别用户以后,进行HTTP响应

##Session生命周期

  • 默认有效期30分钟
  • setMaxInactiveInterval设置有效期
  • 部署描述符配置Session有效期
  • 与Cookie不一样的是,咱们能够主动调用invalidate接口使用Session失效

###Session生命周期设置优先级 经过setMaxInactiveInterval接口设置有效期的优先级大于经过部署描述符配置的Session有效期

##Session实例 ###Session实例演示 在Servlet

HttpSession session = request.getSession();
                session.setAttribute("username",userName);
		String name = (String) session.getAttribute("userName");

再次登陆能够在输出打印到

second login: 123

打开Chrome开发者界面,查看SessionID

输入图片说明

###Session过时 ####设置Session过时时间

//设置当前会话的失效时间,不是web服务。单位秒
		session.setMaxInactiveInterval(1000);

####主动Session失效

session.invalidate();

##经过部署描述符(web.xml)设置session过时时间 web.xml

<session-config>
		<session-timeout>5</session-timeout>
	</session-config>

这里配置的是分钟

#Cookie&Session总结

  • 数据存储
    Cookie是存放在客户端,Session存放在服务器
  • 安全性
    Cookie是存放在客户端安全较弱,但能够经过加密的形式进行存放。,Session存放在服务器内存,安全较强
  • 生命周期
    Cookie是存放在客户端,Session是间隔时间,以最后一次访问为主,能够直接使用API失效
  • 使用原则 Cookie是存放在客户端,一个站点有20个之内数量限制。,Session存放在服务器内存,不建议存放大对象
相关文章
相关标签/搜索