java 中Cookie設置Expires的問題

  項目開發中遇到一個問題,保存第三方跳轉過來的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());

相關文章
相關標籤/搜索