Session是服务器端记录客户端状态的机制,使用上比Cookie简单,相应的增加了服务器的存储压力。
1、什么是Seesion
客户端访问服务器,会以某种方式把访问状态记录在服务器上,再次向服务器发送请求的时候就可以从Session中获取该客户的状态了。
2、实现用户登录
Session对应的类为 java.servlet.http.HttpSession 类。Session对象是在客户端第一次请求服务器的时候创建的。
Session也是key-value的属性对,通过getAttribute(String key)和setAttribute(Sring key,Object value)方法读写客户端状态信息。
<center>
<h1>
<%
HttpSession session1 = request.getSession();
session1.setAttribute("loginTime",new Date());
out.println((Date)session.getAttribute("loginTime"));
%>
</h1>
</center>
上面这段代码只是替代servlet测试,其实jsp内置了session直接获取即可。
3、Session的生命周期
Session是保存在服务器的内存中,所有不要保存太复杂太大的数据,当大量用户同时访问的时候会爆掉。
用户第一次访问的时候自动创建,访问静态资源不会创建,也可以通过request.getSession(true)强制创建。
之后多次请求都会使用同一个session对象,只是不停的更新,当浏览器关闭的时候session失效。
4、session有效期
getMaxInactiveInterval 属性确定,可以通过set、get操作,也可以在web.xml中修改。
void invalidate();方法也可以使session失效。
5、Session常用方法
看下源码就行了,方法比较少。
public interface HttpSession {
long getCreationTime();
String getId();
long getLastAccessedTime();
ServletContext getServletContext();
void setMaxInactiveInterval(int var1);
int getMaxInactiveInterval();
/** @deprecated */
HttpSessionContext getSessionContext();
Object getAttribute(String var1);
/** @deprecated */
Object getValue(String var1);
Enumeration<String> getAttributeNames();
/** @deprecated */
String[] getValueNames();
void setAttribute(String var1, Object var2);
/** @deprecated */
void putValue(String var1, Object var2);
void removeAttribute(String var1);
/** @deprecated */
void removeValue(String var1);
void invalidate();
boolean isNew();
}
Tomcat默认超时时间是20分钟,可以通过web.xml配置,单位是分钟
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<name>JSESSIONID</name>
<domain>example.org</domain>
<path>/shop</path>
<comment>
<!-- some information -->
</comment>
<http-only>true</http-only>
<secure>false</secure>
<max-age>1800</max-age>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
<tracking-mode>URL</tracking-mode>
<tracking-mode>SSL</tracking-mode>
</session-config>
6、Session对浏览器的要求
Session是保存在服务器端的客户端状态,所以需要客户端浏览器的支持。
Session需要使用Cookie作为识别标志。服务器需要向客户端发送一个名JSESSIONID的Cookie,它用这个id来判断是否为同一用户。
如果浏览器禁用Cookie或者不支持怎么办,Java Web提供了另一种解决方案,URL地址重写。
7、URL地址重写
说白了就是把JSESSIONID写在URL上,如果有需要这个后续再补充。