session和Cookie和JSESSIONID

<% 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 %>


你可能感兴趣的:(session和Cookie和JSESSIONID)