标签: javawebjavascript
[TOC]html
Cookie是客户端技术;Session是服务器端技术。java
API:git
一些细节:github
maxAge
设置,存于硬盘,0表示删除session对象由服务器建立,一个浏览器(会话)独占一个session对象web
session对象由服务器建立生命周期apache
request
对象的getSession
方法后才会建立session对象;getSession(false)
只获取, 不建立web.xml
的<session-config>
标签中使用<session-timeout>
,单位分钟;也可调用session
对象的invalidate
方法销毁session基于cookie实现,将JSESSIONID
写回浏览器,这个cookie(JSESSIONID
)默认没设置有效期,关浏览器即销毁。能够自行回写JSESSIONID
覆盖原cookie值api
示例代码片断:浏览器
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); String sessionid = session.getId(); Cookie cookie = new Cookie("JSESSIONID",sessionid); cookie.setPath("/s1"); cookie.setMaxAge(30*60); resp.addCookie(cookie); }
小Tipstomcat
encodeURL
和encodeRedirectURL
防止表单重复提交之令牌例子:
package org.iot.data; import sun.misc.BASE64Encoder; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; /** * Created by brian on 2016/1/27. */ public class TokenProcessor {//令牌 /** * 1.构造方法私有 * 2.本身建立一个 * 3.对外暴露一个方法,容许获取上面建立的对象 */ private TokenProcessor(){} private static final TokenProcessor instance = new TokenProcessor(); public static TokenProcessor getInstance(){ return instance; } public String genetateToken(){ String token = System.currentTimeMillis()+new Random().nextInt()+""; try { MessageDigest md = MessageDigest.getInstance("md5"); byte [] md5 = md.digest(token.getBytes()); //base64编码 BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(md5); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); throw new RuntimeException(e); } } }
容器选用经验:
ServletContext