关于java web中session的一些注意事项与总结
2017-05-12 12:38
591 查看
session的创建时机:
session的创建并不是在浏览器向服务器发出请求的瞬间产生的,而是在server端调用HttpServletRequest.getSession()时创建的。
在一个jsp页面中,session能够作为隐式对象被调用是因为jsp在编译的过程中自动调用了HttpServletRequest.getSession()。
而当在jsp商品页面中使用<%@ page session="false"%>时,jsp页面将不会去主动创建session,但是我们仍然可以在jsp页面中主动调用HttpServletRequest.getSession()去生成一个session。
关于HttpServletRequest.getSession():
HttpServletRequest.getSession(true)表示获取session,如果没有session,那么HttpServletRequest.getSession()就会自动创建一个session。
HttpServletRequest.getSession(false)表示也表示获取session,但是如果没有session,会返回null。
关于session失效:
session失效有两种方法,一种是设置session超时响应使它失效,另一种是调用session的invalidate()方法主动使session失效。
但是需要注意的是,如果使用session.invalidate(),session在失效的同时,浏览器会自动创建一个新的session。
一般来说,要想使一个jsp中session为null,那么只有在jsp页面中使用<%@ page session="false"%>且不使用HttpServletRequest.getSession()或使用时设置为HttpServletRequest.getSession(false)。
同时需要注意的是当使用<%@ page session="false"%>,且在jsp代码中调用:
<%
HttpSession session = new request.getSession();
out.print(session);
session.invalidate();
out.print(session);
%>
时,前后两个out.print()输出的是同一个session。
但是如果不使用<%@ page session="false"%>,仅在jsp代码中使用
<%
out.print(session);
session.invalidate();
out.print(session);
%>
此时,输出的两个session不同。
session的创建并不是在浏览器向服务器发出请求的瞬间产生的,而是在server端调用HttpServletRequest.getSession()时创建的。
在一个jsp页面中,session能够作为隐式对象被调用是因为jsp在编译的过程中自动调用了HttpServletRequest.getSession()。
而当在jsp商品页面中使用<%@ page session="false"%>时,jsp页面将不会去主动创建session,但是我们仍然可以在jsp页面中主动调用HttpServletRequest.getSession()去生成一个session。
关于HttpServletRequest.getSession():
HttpServletRequest.getSession(true)表示获取session,如果没有session,那么HttpServletRequest.getSession()就会自动创建一个session。
HttpServletRequest.getSession(false)表示也表示获取session,但是如果没有session,会返回null。
关于session失效:
session失效有两种方法,一种是设置session超时响应使它失效,另一种是调用session的invalidate()方法主动使session失效。
但是需要注意的是,如果使用session.invalidate(),session在失效的同时,浏览器会自动创建一个新的session。
一般来说,要想使一个jsp中session为null,那么只有在jsp页面中使用<%@ page session="false"%>且不使用HttpServletRequest.getSession()或使用时设置为HttpServletRequest.getSession(false)。
同时需要注意的是当使用<%@ page session="false"%>,且在jsp代码中调用:
<%
HttpSession session = new request.getSession();
out.print(session);
session.invalidate();
out.print(session);
%>
时,前后两个out.print()输出的是同一个session。
但是如果不使用<%@ page session="false"%>,仅在jsp代码中使用
<%
out.print(session);
session.invalidate();
out.print(session);
%>
此时,输出的两个session不同。
相关文章推荐
- 【JavaWeb-19】Struts2总结案例中的一些实战知识小点和注意事项
- 关于web前端的一些注意事项
- 关于java异常的一些准则,注意事项
- 关于JAVA数组的几点注意事项与一些低级错误
- 关于css一些注意事项的总结
- java编程的一些注意事项,网络资源总结
- 关于页面跳转的一些总结 浏览器对象与页面刷新 -- JAVA web
- 关于JAVA数组的几点注意事项与一些低级错误
- Java web 中关于Servlet的一些总结
- 关于阿里云ACE中JAVA平台的一些注意事项
- 《黑马程序员》java笔记->【02】关于Static静态方法的一些注意事项
- 关于初学者学习Java的一些注意事项
- Java 调用 .net Webservice的一些问题和注意事项
- 关于java中bufferedreader的一些注意事项
- 关于Java开发中使用Oracle数据库的一点注意事项
- OSGI 中关于Module层包共享的一些注意事项
- 写java程序时需要注意的一些总结!
- 总结出来的一些ASP.NET程序性能优化的注意事项
- 总结一些CSS实用技巧及必须注意的事项
- 关于java applet打包注意事项