JSP Session
HTTP是无状态协议,这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息。
有三种方法来维持客户端与服务器的会话:
- Cookies:
网络服务器可以指定一个唯一的session ID作为cookie来代表每个客户端,用来识别这个客户端接下来的请求。
这可能不是一种有效的方式,因为很多时候浏览器并不一定支持cookie,所以我们不建议使用这种方法来维持会话。
//向客户端添加cookie
String nameKey = URLEncoder.encode("姓名", "utf-8") ;// cookie保存中文报错
String nameValue = URLEncoder.encode("张三", "utf-8") ;// cookie保存中文报错
Cookie cookie = new Cookie(nameKey, nameValue);
cookie.setMaxAge(60);// 秒
response.addCookie(cookie);
- 隐藏表单域:
一个网络服务器可以发送一个隐藏的HTML表单域和一个唯一的session ID.
这个条目意味着,当表单被提交时,指定的名称和值将会自动包含在GET或POST数据中。每当浏览器发送一个请求,session_id的值就可以用来保存不同浏览器的轨迹。
这种方式可能是一种有效的方式,但点击a标签中的超链接时不会产生表单提交事件,因此隐藏表单域也不支持通用会话跟踪。
<input type="hidden" name="session" value="session">
-
重写URL:
您可以在每个URL后面添加一些额外的数据来区分会话,服务器能够根据这些 数据来关联session标识符。 -
Session对象:
Session原理:WEB容器为每个客户端会提供一个session,当调用相应的方法时,该session就会产生,并同时产生一个唯一的session ID,通过Cookie发送到客户端进行保存,并可以向session里存数据(对象),那么该客户端在由该页面跳转到 下一个页面后,就可以把前面页面中向session中共享的数据取出来。
得到session对象
request.getSession(无参/true);
>得到session的唯一标识ID号:`session.getId()`
>得到session的创建时间:`session.getCreationTime() `
>上次访问时间:`session.getLastAccessedTime() `
>得到最大活动时间(生存时间):`session.getMaxInactiveInterval() `
>设置最大活动时间(生存时间):`session.setMaxInactiveInterval(int秒) `