標籤: 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