您的位置:首页 > 编程语言 > Java开发

关于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不同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: