<% Cookie cookie = new Cookie("userName", "zhangsan");
cookie.setMaxAge(30 * 24 * 60 * 60); //保存30天
// cookie.setDomain(".baidu.com");
// cookie.setPath("/");
// cookie.setDomain(".0.0.1");
// cookie.setDomain(request.getHeader("host"));
// cookie.setPath("/");
// 使用javascript无法读取HttpOnly=true的cookie,安全性更高
// 在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击
//js无法读取到cookie信息,但是服务器端仍然可以使用java语言读取到cookie信息
cookie.setHttpOnly(true);
response.addCookie(cookie); //写COOKIE
%>
<%
//设置Cookie的域(setDomain)和路径(setPath),给别的web应用设置Cookie
// Cookie testCookie = new Cookie("test", "testDomainAndPath");
// 使用javascript无法读取HttpOnly=true的cookie,安全性更高
// 在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击
// testCookie.setHttpOnly(true);
// testCookie.setDomain("");
// testCookie.setPath("");
//手动设置jsessionid到浏览器中的Cookie(测试下各个浏览器是会覆盖JSESSIONID,还是会有2个JSESSIONID)
// Cookie cookie2 = new Cookie("JSESSIONID", "test360731");
Cookie cookie2 = new Cookie("JSESSIONID", session.getId());
/*
测试得出结论,在打开浏览器(不关闭浏览器)的情况下,只要浏览器2分钟不和服务器交互,名称叫JSESSIONID的Cookie会自动失
效,所以2分钟之后,浏览器再向服务器发送请求的时候,在请求头中的这个叫JSESSIONID的Cookie已经失效了,也就是说不会在请
求头中发送这个叫JSESSIONID的Cookie给服务器(即浏览器中已经没有JSESSIONID了),那服务器自然不知道,也分辨不
出到底是哪个客户端(浏览器)请求的服务器,因为在服务器端找不到sessionid与浏览器请求中发送过来的JSESSIONID相匹配,别
说服务器端的sessionid和浏览器中名叫JSESSIONID的Cookie匹配了,在浏览器超过2分钟未和服务器交互的情况下,这
时浏览器中名叫JSESSIONID的Cookie早就失效了,在2分钟后浏览器再次请求服务器,此时,浏览器中名叫JSESSIONID的Cookie都已
经失效了,在浏览器请求服务器的过程中,在请求头中连带都不会带这个名叫JSESSIONID的Cookie到服务器,所以只要是2分钟内浏览器未和服
务器进行交互,而是在2分钟后浏览器才再次向服务器发送请求进行交互的话,服务器端会向浏览器中回写一个新的sessionid到名
叫JSESSIONID的Cookie中
*/
/*很多浏览器都是名叫JSESSIONID的Cookie默认的MaxAge等于-1,即关闭浏览器,名叫JSESSIONID的Cookie就失效,所
以很多网站你已经登录了,但是你把浏览器关闭了,再重新打开浏览器访问你刚才已经登录了的网站,发现要求你重新登录,其
实就是因为名叫JSESSIONID的Cookie默认的MaxAge等于-1导致的,如果在自己开发的项目中,用户在浏览器中登录了你的web应用程
序,但是用户关闭了浏览器,此时用户再次打开浏览器访问你web应用程序,发现又要重新登录,用户会很反感,如果你想解决这个问题的话,可以使
用这种写法Cookie cookie2 = new Cookie("JSESSIONID", session.getId());
cookie2.setMaxAge(24 * 60 * 60);//保存24个小时
response.addCookie(cookie2);
但是我还是想提醒大家,cookie2.setMaxAge(24 * 60 * 60);这句话在设置MaxAge时间的时候,不要设置太大,如
果是在网吧等这些公共场合的话,你用浏览器登录了web应用程序,然后你关闭了浏览器,然后下机或者离开座位,别人用你这台电脑,打
开浏览器,打开你刚才访问的web应用程序,只要该web应用程序的名叫JSESSIONID的Cookie的MaxAge还没过期,那别
人就可以继续使用你刚才已经登录了的账号访问和操作该web应用程序,这样你的账号就会被别人非法操作和使用,造成你的损失,
如果浏览器中的名叫JSESSIONID,JSESSIONID的值等于AECE15RYHN的Cookie没有过期,而服务
器端的sessionid等于AECE15RYHN的session对象超过了过期时间,那浏览器再访问该web应用程序时还是需要重新登录才行
(当然啦,客户端浏览器中的名叫JSESSIONID的Cookie是需要在请求头中发
送到服务器和服务器的sessionid匹配的,要不然服务器怎么知道,怎么分辨是哪个客户端浏览器发来的请求,换句话说,浏
览器中的JSESSIONID要和服务器上的sessionid相等,服务器才知道你到底是哪个客户端浏览器,如果浏览
器中的名叫JSESSIONID的Cookie没有过期,而服务器上的session的sessionid过期了,那浏览
器的名叫JSESSIONID的Cookie还是匹配不到服务器上的sessionid,那用户还是需要重新登录web应用程序,所
以浏览器上的名叫JSESSIONID的Cookie必须要和服务器端上的sessionid配合使用才能形成一次完整的会话过程,缺一不可,还有一点大
家注意,服务器端的sessionid的过期时间是可以自己设置的,服务器上session会话过期时间的设置,大家都知道的,这
里我就不再赘述了!所以大家在一些公共场合上网的时候,使用了浏览器登录了一些网站,如果不想用这些网站了,最好使
用浏览器清除掉所有的Cookie,防止别人在你离开位置后别人非法使用你的账号进行操作,尤其是像网银,支付宝等涉及资
金财产的一些web网站,大家一定要提高安全意识,避免财产损失!)
*/
//测试浏览器关闭后2分钟失效还是浏览器在不关闭的情况下,2分钟不做任何操作失效
/*
经过测试,火狐浏览器和IE(版本为IE11)浏览器在不关闭的情况下,Cookie超过了MaxAge(过期时间),Cookie就会立马失效,但
是谷歌浏览器在不关闭的情况下,Cookie超过了MaxAge(过期时间),Cookie不会立马失效,
谷歌浏览器在不关闭浏览器的情况下,Cookie超过了MaxAge(过期时间),Cookie也会立马失效,不过有意思的是,经过我的观察发
现,谷歌浏览器中保存了2份JSESSIONID,一份是新的JSESSIONID,还有一份是过期了的JSESSIONID
*/
/*有个奇怪的问题,我明明把JSESSIONID这个cookie的MaxAge(过期时间)设置成了2分钟,为什么从浏览器中传回到服务器上时,我打
印出JSESSIONID这个cookie的MaxAge却变成了-1,不仅如此,从浏览器中传回到服务器上的所
有的Cookie的MaxAge的值都是-1
*/
cookie2.setMaxAge(2 * 60); //保存2分钟(为了测试浏览器关闭后,看看名称为JSESSIONID的cookie是否马上失效)
response.addCookie(cookie2); //写COOKIE
%>
testCookie.jsp
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
演示Cookie,Cookie的读取和写入
演示Cookie,Cookie的读取和写入
<%
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:sss");
out.print("当前时间:" + df.format(now) + "
");
out.print("sessionId=" + session.getId() + "
");
out.print("您好:" + session.getAttribute("myName") + "
");
%>
<%
Cookie cookie = new Cookie("userName", "zhangsan");
cookie.setMaxAge(30 * 24 * 60 * 60); //保存30天
// cookie.setDomain(".baidu.com");
// cookie.setPath("/");
// cookie.setDomain(".0.0.1");
// cookie.setDomain(request.getHeader("host"));
// cookie.setPath("/");
// 使用javascript无法读取HttpOnly=true的cookie,安全性更高
// 在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击
//js无法读取到cookie信息,但是服务器端仍然可以使用java语言读取到cookie信息
cookie.setHttpOnly(true);
response.addCookie(cookie); //写COOKIE
Cookie[] cookies = request.getCookies();
out.print("cookies数组对象=" + cookies + "
");
if(cookies != null){
out.print("
");
out.print("所有Cookie如下:
");
Cookie sCookie = null;
out.print("cookies数量=" + cookies.length + "
");
for (int i = 0; i < cookies.length; i++) { //用一个循环语句遍历刚才建立的Cookie对象数组
sCookie = cookies[i]; //取出数组中的一个Cookie对象
if (sCookie != null) {
// if (("cookieName").equals(sCookie.getName())) {
// pageContext.setAttribute("SavedUserName", sCookie.getValue());
// }
String str = "♥ ";
out.print(str + sCookie.getName() + " = " + sCookie.getValue() + " /MaxAge=" + sCookie.getMaxAge() + " /Version=" + sCookie.getVersion() + "
");
if("zhangsan".equals(sCookie.getValue())){
Cookie myCookie = new Cookie("message", "hello my name is zhangsan");
myCookie.setMaxAge(30 * 24 * 60 * 60); //保存30天
response.addCookie(myCookie); //写COOKIE
}else if("lisi".equals(sCookie.getValue())){
Cookie myCookie = new Cookie("message", "hello my name is lisi");
myCookie.setMaxAge(30 * 24 * 60 * 60); //保存30天
response.addCookie(myCookie); //写COOKIE
}
}
}
out.print("
");
}
%>
<%
//设置Cookie的域(setDomain)和路径(setPath),给别的web应用设置Cookie
// Cookie testCookie = new Cookie("test", "testDomainAndPath");
// 使用javascript无法读取HttpOnly=true的cookie,安全性更高
// 在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击
// testCookie.setHttpOnly(true);
// testCookie.setDomain("");
// testCookie.setPath("");
//手动设置jsessionid到浏览器中的Cookie(测试下各个浏览器是会覆盖JSESSIONID,还是会有2个JSESSIONID)
// Cookie cookie2 = new Cookie("JSESSIONID", "test360731");
Cookie cookie2 = new Cookie("JSESSIONID", session.getId());
/*
测试得出结论,在打开浏览器(不关闭浏览器)的情况下,只要浏览器2分钟不和服务器交互,名称叫JSESSIONID的Cookie会自动失
效,所以2分钟之后,浏览器再向服务器发送请求的时候,在请求头中的这个叫JSESSIONID的Cookie已经失效了,也就是说不会在请
求头中发送这个叫JSESSIONID的Cookie给服务器(即浏览器中已经没有JSESSIONID了),那服务器自然不知道,也分辨不
出到底是哪个客户端(浏览器)请求的服务器,因为在服务器端找不到sessionid与浏览器请求中发送过来的JSESSIONID相匹配,别
说服务器端的sessionid和浏览器中名叫JSESSIONID的Cookie匹配了,在浏览器超过2分钟未和服务器交互的情况下,这
时浏览器中名叫JSESSIONID的Cookie早就失效了,在2分钟后浏览器再次请求服务器,此时,浏览器中名叫JSESSIONID的Cookie都已
经失效了,在浏览器请求服务器的过程中,在请求头中连带都不会带这个名叫JSESSIONID的Cookie到服务器,所以只要是2分钟内浏览器未和服
务器进行交互,而是在2分钟后浏览器才再次向服务器发送请求进行交互的话,服务器端会向浏览器中回写一个新的sessionid到名
叫JSESSIONID的Cookie中
*/
/*很多浏览器都是名叫JSESSIONID的Cookie默认的MaxAge等于-1,即关闭浏览器,名叫JSESSIONID的Cookie就失效,所
以很多网站你已经登录了,但是你把浏览器关闭了,再重新打开浏览器访问你刚才已经登录了的网站,发现要求你重新登录,其
实就是因为名叫JSESSIONID的Cookie默认的MaxAge等于-1导致的,如果在自己开发的项目中,用户在浏览器中登录了你的web应用程
序,但是用户关闭了浏览器,此时用户再次打开浏览器访问你web应用程序,发现又要重新登录,用户会很反感,如果你想解决这个问题的话,可以使
用这种写法Cookie cookie2 = new Cookie("JSESSIONID", session.getId());
cookie2.setMaxAge(24 * 60 * 60);//保存24个小时
response.addCookie(cookie2);
但是我还是想提醒大家,cookie2.setMaxAge(24 * 60 * 60);这句话在设置MaxAge时间的时候,不要设置太大,如
果是在网吧等这些公共场合的话,你用浏览器登录了web应用程序,然后你关闭了浏览器,然后下机或者离开座位,别人用你这台电脑,打
开浏览器,打开你刚才访问的web应用程序,只要该web应用程序的名叫JSESSIONID的Cookie的MaxAge还没过期,那别
人就可以继续使用你刚才已经登录了的账号访问和操作该web应用程序,这样你的账号就会被别人非法操作和使用,造成你的损失,
如果浏览器中的名叫JSESSIONID,JSESSIONID的值等于AECE15RYHN的Cookie没有过期,而服务
器端的sessionid等于AECE15RYHN的session对象超过了过期时间,那浏览器再访问该web应用程序时还是需要重新登录才行
(当然啦,客户端浏览器中的名叫JSESSIONID的Cookie是需要在请求头中发
送到服务器和服务器的sessionid匹配的,要不然服务器怎么知道,怎么分辨是哪个客户端浏览器发来的请求,换句话说,浏
览器中的JSESSIONID要和服务器上的sessionid相等,服务器才知道你到底是哪个客户端浏览器,如果浏览
器中的名叫JSESSIONID的Cookie没有过期,而服务器上的session的sessionid过期了,那浏览
器的名叫JSESSIONID的Cookie还是匹配不到服务器上的sessionid,那用户还是需要重新登录web应用程序,所
以浏览器上的名叫JSESSIONID的Cookie必须要和服务器端上的sessionid配合使用才能形成一次完整的会话过程,缺一不可,还有一点大
家注意,服务器端的sessionid的过期时间是可以自己设置的,服务器上session会话过期时间的设置,大家都知道的,这
里我就不再赘述了!所以大家在一些公共场合上网的时候,使用了浏览器登录了一些网站,如果不想用这些网站了,最好使
用浏览器清除掉所有的Cookie,防止别人在你离开位置后别人非法使用你的账号进行操作,尤其是像网银,支付宝等涉及资
金财产的一些web网站,大家一定要提高安全意识,避免财产损失!)
*/
//测试浏览器关闭后2分钟失效还是浏览器在不关闭的情况下,2分钟不做任何操作失效
/*
经过测试,火狐浏览器和IE(版本为IE11)浏览器在不关闭的情况下,Cookie超过了MaxAge(过期时间),Cookie就会立马失效,但
是谷歌浏览器在不关闭的情况下,Cookie超过了MaxAge(过期时间),Cookie不会立马失效,
谷歌浏览器在不关闭浏览器的情况下,Cookie超过了MaxAge(过期时间),Cookie也会立马失效,不过有意思的是,经过我的观察发
现,谷歌浏览器中保存了2份JSESSIONID,一份是新的JSESSIONID,还有一份是过期了的JSESSIONID
*/
/*有个奇怪的问题,我明明把JSESSIONID这个cookie的MaxAge(过期时间)设置成了2分钟,为什么从浏览器中传回到服务器上时,我打
印出JSESSIONID这个cookie的MaxAge却变成了-1,不仅如此,从浏览器中传回到服务器上的所
有的Cookie的MaxAge的值都是-1
*/
cookie2.setMaxAge(2 * 60); //保存2分钟(为了测试浏览器关闭后,看看名称为JSESSIONID的cookie是否马上失效)
response.addCookie(cookie2); //写COOKIE
%>