JavaWeb-Cookie&Session

Cookie

1.Http协议与Cookie
(1)Cookie是Http协议设置的,主要是用来保存服务器向客户端存储的一些数据。当服务器再次请求服务器时,其将Cookie返回给服务器。
(2)服务器向客户端保存的是一个键值对:set-Cookie: aaa=AAA;

2.JavaWeb中使用Cookie
使用response.addCookie()
使用request.getCookies()
Cookie:maxAge:通过cookie.setMaxAge()设置为Cookie的最大生命时间(单位为秒)
maxAge>0:浏览器将Cookie保存至客户机磁盘上,有效时常为设置的时间
maxAge=0:Cookie仅存在内存中,当浏览器结束进程,Cookie也随之销毁。
maxAge<0:浏览器会立刻删除这个Cookie

3.Cookie的路径Path
Cookie的path路径指的是服务器创建Cookie设置的路径,当浏览器访问服务器时,根据Cookie的path路径决定浏览器需要返回给服务器哪些Cookie。(访问服务器的路径中包含哪写Cookie的路径就要返回那些Cookie)

HttpSession
1.HttpSession是和Http有关的服务器端创建的对象,用来跟踪会话,保存在客户端。它是三大域之一,用来多个Servlet之间共享数据的东西。会话范围就是从用户首次访问客户端到用户关闭浏览器为止是一次会话,使用一个Session。HttpSession主要是依靠底层的Cookie或URL重写。服务器为每一个客户端创建一个session对象,保存在服务器的map中。
2.通过request.getSession();从Servlet中得到session对象(根据客户端发来的request请求 通过map得到响应的session对象)

JSP中得到session对象时,直接使用session中的方法(.getAttribute()),session时jsp中的内置对象。

3.利用Session简单校验用户是否登录代码
流程:
(1)用户进入login.jsp(登录界面),输入用户名和密码,提交表单。
(2)login.jsp页面提交的表单信息发送给Servlet进行校验。
(3)Servlet校验后返回两种结果:
①校验失败:向request域中保存错误信息,并返回到login.jsp页面
②校验成功:保存用户名和密码等信息到session对象中,并重定向到首页(success.jsp)
(4)如果浏览器直接访问success.jsp时,服务器会检查session中是否能获取到用户信息
①如果可以,则继续访问
②如果不能,则返回登陆界面

(不方便用代码块)login.jspJavaWeb-Cookie&Session_第1张图片
JavaWeb-Cookie&Session_第2张图片
JavaWeb-Cookie&Session_第3张图片
编程过程中出现了基础错误:
①输入错误用户名或密码时跳转页面的时候用了response.sendRedirect();
分析:此方法是重定向方法,因此是发送两次请求,得到两次响应,所以每一次请求都是新的request.而使用request保存错误信息就是为了能够将request域中的信息发送给请求的页面,如果重定向request域中没有数据。所以这就是使用请求转发的原因。
②要注意重定向和请求转发中的参数范围不一样。

4.HttpSession原理

获取Cookie中的JSESSIONID;
如果该JSESSIONID不存在,则创建session,然后保存JSESSIONID到Cookie中
如果存在,则通过JSESSIONID查找到服务器端对应的session,如果没有查到,创建session,保存新的session然后保存新的JSESSIONID
如果存在,并且根据ID在服务器端查找到相应的session,则不需创建对象
返回session(如果不获取session,即request.getSession(),就不会创建session)

5.HttpSession其他方法
String getId();
int getMaxInactiveInterval():获取session可以的最大不活动空间,以秒为单位,默认为三十分钟,当session在三十分钟内不被获取就会从session池中移除。
void invalidate():让session失效。例如,登陆网站之后点击"退出登录"
boolean isNew():

6.在web.xml配置session最大不活动时间

<session-config>
<session-timeout>30<session-timeout>
session-config>

你可能感兴趣的:(java)