項目開發中遇到一個問題,保存第三方跳轉過來的url所帶的參數到cookie,並持久化到本地。若是使用Servlet 使用的api,會致使某些時候cookie沒法存在本地的問題,所以本次修改,改成setHeaderhtml
最開始時,將過時日期的格式設置爲 dd-MM-yyyy HH:mm:ss,但發現google console上面的過時時間是session,即該會話後,此cookie消失:java
code1:node
Calendar cal = Calendar.getInstance(); cal.add(Calendar.YEAR, 1); Date date = cal.getTime(); Locale locale = Locale.CHINA; SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", locale); StringBuilder builder = new StringBuilder(); builder.append(name + "=" + value + "; "); builder.append("Path=/; HttpOnly; "); builder.append("Expires=" + sdf.format(date)); response.setHeader("Set-Cookie", builder.toString());
效果如圖:git
想了一下多是時間格式 的問題,找了幾篇文章,參考了一下github
http://www.kancloud.cn/kancloud/http-cookies-explained/48328 api
https://github.com/alsotang/node-lessons/tree/master/lesson16 瀏覽器
https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.htmlcookie
將日期格式設置爲 「EEE, d MMM yyyy HH:mm:ss Z」,但瀏瀏覽器的上cookie的過時日期仍然爲Session,session
點開ResponseHeader中發現過時時間中時間格式裏有亂碼,應該是本地時間出問題了,所以在 SimpleDateFormat中加入入本地化參數usoracle
code2:
Date date = DateUtils.addMonths(DateUtils.today(), 12); SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US); StringBuilder builder = new StringBuilder(); builder.append(name + "=" + value + "; "); builder.append("Path=/; HttpOnly; "); builder.append("Expires=" + sdf.format(date)); response.setHeader("Set-Cookie", builder.toString());