学子商城 —— day02 (会话跟踪,用户注册登录)

1. 用户注册

  1. 在dao定义insertUser方法
    学子商城 —— day02 (会话跟踪,用户注册登录)
  2. 在service定义addUser方法
    学子商城 —— day02 (会话跟踪,用户注册登录)
    md5密码加密:
    学子商城 —— day02 (会话跟踪,用户注册登录)
  3. 在controller层学子商城 —— day02 (会话跟踪,用户注册登录)
  4. register.jsp
    学子商城 —— day02 (会话跟踪,用户注册登录)

2. 常用的会话跟踪技术

2.1 cookie:

  • 存储数据在客户端(key-value)

  • 不安全,存储数据有限:4kb

  • 一个网站可以存20个cookie

  • 通过服务器的程序Servlet把cookie对象存到客户端

  • 分类

    • 暂时性 cookie:存储到浏览器缓存中。浏览器关闭时失效
    • 永久性 cookie :可设置时间setMaxAge()
      • cookie.setMaxAge(1800);// 时间单位是秒
      • cookie.setMaxAge(0); //0表示cookie失效

设置cookie

  • cookie存的数据只能是字符串

学子商城 —— day02 (会话跟踪,用户注册登录)
学子商城 —— day02 (会话跟踪,用户注册登录)
设置永久性cookie:
学子商城 —— day02 (会话跟踪,用户注册登录)
学子商城 —— day02 (会话跟踪,用户注册登录)

获取cookie

学子商城 —— day02 (会话跟踪,用户注册登录)
学子商城 —— day02 (会话跟踪,用户注册登录)

练习:免登录功能

LoginServlet:
学子商城 —— day02 (会话跟踪,用户注册登录)
login.jsp
学子商城 —— day02 (会话跟踪,用户注册登录)
ok.jsp
学子商城 —— day02 (会话跟踪,用户注册登录)

2.2 session

  • 服务器和客户端连续的会话(请求响应)过程
  • 需要管理数据(会话管理)。
  • HTTPSession没有父接口
  • 设置失效时间
    以最后一次操作时间起算
    • session.setMaxInactiveInterval(1800);//秒
    • session.invalidate();//无条件让session失效
    • < session-config>
      < session-timeout> 30 < /session-timeout>//分钟
      < /session-config>

获取session对象

  • getSession():request
  • getSession(boolean):request
    • getSession(true):request
      第一次调用此方法,表示创建一个session对象,
      之后再去调用此方法,表示获取之前创建的对象
      getSession()和 getSession(true)形同
    • getSession(false):request
      如果之前创建过session对象,那么返回,如果没有,那么返回null(不创建对象)

session常用方法

  • isNew()
  • getId());//sessionid
  • getMaxInactiveInterval()); //session最长有效时间
  • getCreationTime()); // 创建session的时间
  • getLastAccessedTime())); // 最后访问时间
    学子商城 —— day02 (会话跟踪,用户注册登录)

存储数据

  • setAttribute
  • getAttribute
  • removeAttribute

学子商城 —— day02 (会话跟踪,用户注册登录)
学子商城 —— day02 (会话跟踪,用户注册登录)
学子商城 —— day02 (会话跟踪,用户注册登录)

工作原理

  • 创建session对象,会有一个唯一的id,作为cookie对象的value,和JSESSIONID封装到cookie对象;响应到客户端,作为客户端header信息的一部分;
  • 使用该浏览器发送请求时,cookie对象把请求发送给服务器端;
  • 根据JSESSIONID,找到session对象,如果有,返回,如果没有,创建一个新的session对象。
request session application
生命周期 一次请求响应 一次会话 和web应用生存周期相同

3. 用户登录

service层:
学子商城 —— day02 (会话跟踪,用户注册登录)
定义两个自定义异常,用户名或密码错误时抛出异常。
NameNotExistException.java
学子商城 —— day02 (会话跟踪,用户注册登录)
PasswordErrorException.java
学子商城 —— day02 (会话跟踪,用户注册登录)
servlet层:
学子商城 —— day02 (会话跟踪,用户注册登录)
login.jsp
验证用户名、密码都正确后才可登录成功
错误时提示错误信息
学子商城 —— day02 (会话跟踪,用户注册登录)
学子商城 —— day02 (会话跟踪,用户注册登录)
学子商城 —— day02 (会话跟踪,用户注册登录)

index.jsp
登录后,显示用户名,“注册”变为“退出”;
退出后,用户名消失,“退出”变为“登录”
学子商城 —— day02 (会话跟踪,用户注册登录)
学子商城 —— day02 (会话跟踪,用户注册登录)