java web cookie和session
http是无状态的,为了记录用户信息需要cookie和session
cookie和session是web程序中用来跟踪会话的技术
cookie在客户端中记录信息确定用户身份
session在服务端中记录信息确定用户身份
理解会话
浏览器访问服务器,会话开始,在关闭之前,不论发送多少请求都算是一次会话。
cookie
- 由服务端创建(一旦cookie创建好了,就不能在往其中增加别的键值对,但是可以修改其中的内容)
Cookie cookie = new Cookie(key,value); //以键值对的方式存放内容,
response.addCookie(cookie); //发送回浏览器端
cookie.setValue(); //将key对应的value值修改
- 保存在客户端
服务端通过getCookies()获得信息 - cookie的生存时间
一般是浏览器关闭时失效,也可以设置时间
cookie.setMaxAge(expiry); //设置cookie被浏览器保存的时间。
expiry:单位秒,默认为-1,
expiry=-1:代表浏览器关闭后,也就是会话结束后,cookie就失效了,也就没有了。
expiry>0:代表浏览器关闭后,cookie不会失效,仍然存在。并且会将cookie保存到硬盘中,直到设置时间过期才会被浏览器自动删除,
expiry=0:删除cookie。不管是之前的expiry=-1还是expiry>0,当设置expiry=0时,cookie都会被浏览器给删除。
cookie的使用范围
cookie默认路径:当前访问的servlet父路径。
例如:http://localhost:8080/test01/a/b/c/SendCookieServlet
默认路径:/test01/a/b/c 也就是说,在该默认路径下的所有Servlet都能够获取到cookie,/test01/a/b/c/MyServlet 这个MyServlet就能获取到cookie。修改cookie的访问路径:
setPath("/"); //在该服务器下,任何项目,任何位置都能获取到cookie,
用途:保证在tomcat下所有的web项目可以共享相同的cookie
setPath("/test01/"); //在test01项目下任何位置都能获取到cookie。
session
流程
浏览器发送请求给服务器,服务器会检查浏览器是否有sessionid,如果没有就创建一个sessionid,有cookie保存这个sessionid传给浏览器;如果有这个sessionid,说明以前创建过这个session,则根据这个sessionid把session找出来。
获得session
- request.getSession(); //如果没有将创建一个新的,等效getSession(true);
- request.getSession(boolean); //true:没有session将创建并返回;false:没有session将返回null
session数据共享
- setAttrubute(key,value);
- getAttribute(key);
session存活时间
session是存在服务器中的,服务器并不知道浏览器什么时候会关闭,而sessionid用cookie存在浏览器中,一般情况下,浏览器关闭则cookie失效,也就是这个sessionid就消失了(除非设置cookie不在浏览器关闭的时候失效),所以服务器就给session设置了个存活时间,一般是30分钟,超过这个时间,就把session回收。
我们也可以控制session的存活:
- session.invalidate()将session对象销毁
- setMaxInactiveInterval(int interval) 设置有效时间,单位秒
- 在web.xml中配置session的有效时间
<session-config>
<session-timeout>30</session-timeout> <--!单位:分钟-->
<session-config>
浏览器禁用cookie,怎么传递sessionid
浏览器将cookie禁用,sessionid不能通过这种方式保存,每次使用request.getSession() 都将创建一个新的session,达不到session共享数据的目的。
但是我们知道只需要将session id 传递给服务器session就可以正常工作的,所以可以在url传递参数的方式传递sessionid
推荐阅读
-
COOKIE和SESSION关系和区别等,cookiesession区别
-
PHP中cookie和session的区别实例分析_php实例
-
CGI和servlet运行方式本质的区别是什么?PHP和Java在Web开发的原理有哪些本质不同?
-
php中session和cookie实现自动登录_PHP教程
-
php同时使用session和cookie来保存用户登录信息的实现代码,sessioncookie_PHP教程
-
详解PHP中cookie和session的区别及cookie和session用法小结,cookiesession
-
thinkphp中session和cookie无效的解决方法,thinkphpsession
-
cookie和session的加密?
-
Java web Filter, Strurs2 Interceptor 和 SpringMVC Interceptor 三者之间的联系与区别
-
php中cookie和session使用范例