Java后台---从底层了解Session会话、pageContext
来源:互联网 发布:便宜好用的护肤品知乎 编辑:程序博客网 时间:2024/05/21 21:57
Session会话简介:
- 会话是指在一段时间内,用户使用同一个浏览器进程与Web应用之间的交互过程。
- 会话(Session)通常用来跟踪用户的状态,缓存用户在此浏览器进程中的信息。
- 当用户关闭浏览器,上一个Session也就无法再次获得了(Cookie的maxAge为-1的情况)。再次打开新的浏览器,将开始一个新的会话。
- 类javax.servlet.http.HttpSession。每一个HttpSession代表用户的一个会话。
- 每一个Session的过期时间默认为30分钟。
- 当浏览器第一次访问服务器时,无论先访问哪一个页面,服务器就会给用户分配一个唯一的会话标识,即jsessionid然后以cookie的形式返回给用户
- 当浏览器再次访问服务器时,会携带包含了jsessionid的cookie访问服务器。服务器根据此id返回此用户的HttpSession对象,就保持了会话
下面是我自己整理了与浏览器的交互图:
知识点1:因为浏览器的默认过期时间为-1,就是关闭浏览器,要想解决不小心关闭浏览器而想找回刚刚保存的信息,就必须在服务器端加入如下代码
//把cookie技术和session技术联合起来做应用的一个例子---※功能:让用户在关闭浏览器之后,如果10分钟之内能够登录本站,还能访问到session中的信息 //向客户端写一个key为"JSESSIONID"用value为sessionid的cookie, Cookie c=new Cookie("JSESSIONID",request.getSession().getId()); c.setPath(request.getContextPath()); c.setMaxAge(60*60);//一小时过期 response.addCookie(c);
知识点2:想要在登录一个网站后安全退出,那么就必须切换JSESIOONID。服务器端加入如下代码
request.getSession().invalidate();
当用户登录后,一般在Session中保存有用户的信息。
•Session.setAttirubte(…)
用户退出时,应该当将自己的信息从Session中清除-即安全退出。
•Session.invalidate();
•Session.removeAttribute(…)
知识点3:重写url技术---破解用户禁用cookie之后,我们session无效的问题(实质是对get利用get方式进行传值——jsessionid)
如果浏览器支持Cookie,Servlet容器就将SessionID作为Cookie保存在浏览器的客户端。但如果出于安全的考虑,用户禁用了Cookie,那么Servlet容器又如何来跟踪会话呢?
利用
response.encodeURL("servlet")
在要调用servlet的地方改servlet为
response.encodeURL("servlet")
<form action=<%=response.encodeURL("SaveServlet")%> method="post"> Name:<input type="text" name="name"/><br/> <input type="submit" value="提交"/> </form> <a href="<%=response.encodeURL("GetServlet")%>">读取几个容器中的数据</a>
pageContext<h2>演示一下jsp中的4个容器---pageContext之前没遇到过</h2> <% //从小到大的4个容器 //pageContext.setAttribute("name", "page-Jack"); //request.setAttribute("name", "request-Jack"); //session.setAttribute("name", "session-Jack"); //application.setAttribute("name", "application-Jack"); %> <% //从小到大的4个容器//这一段的功能等价于上面一段----全是通过pageContext.setAttribute()实现 pageContext.setAttribute("name", "page-Jack",PageContext.PAGE_SCOPE); pageContext.setAttribute("name", "page-Jack",PageContext.REQUEST_SCOPE); pageContext.setAttribute("name", "page-Jack",PageContext.SESSION_SCOPE); pageContext.setAttribute("name", "page-Jack",PageContext.APPLICATION_SCOPE); %> okok <% out.println( pageContext.getAttribute("name") ); out.println( request.getAttribute("name") ); out.println( session.getAttribute("name") ); out.println( application.getAttribute("name") ); %> <%//这一段的功能等价于上面一段----全是通过pageContext.getAttribute()实现 out.println( pageContext.getAttribute("name",PageContext.PAGE_SCOPE) ); out.println( pageContext.getAttribute("name",PageContext.REQUEST_SCOPE) ); out.println( pageContext.getAttribute("name",PageContext.SESSION_SCOPE) ); out.println( pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE) ); %> <br/><br/> <% //pageContext.findAttribute()方法会(从小到大的容器)依次从pageContext、request、session和application中查找对应的属性,找到一个,后面就不会再找了 String str1 =(String) pageContext.findAttribute("name"); out.println(">>>"+str1); %>
0 0
- Java后台---从底层了解Session会话、pageContext
- session会话的底层实现方式
- 从底层开始了解hashmap
- 了解负载均衡 会话保持 session同步
- 了解负载均衡 会话保持 session同步
- 了解负载均衡 会话保持 session同步
- 了解负载均衡、会话保持、session同步
- 从底层了解ASP.NET体系结构
- 从底层了解ASP.NET体系结构
- 从底层了解ASP.NET体系结构
- [转载]从底层了解ASP.NET体系结构
- 从底层了解ASP.NET体系结构
- 从底层了解ASP.NET体系结构
- 从底层了解ASP.NET体系结构
- 从底层了解ASP.NET体系结构
- 从底层了解ASP.NET体系结构
- 从底层了解ASP.NET体系结构 (转)
- 从底层了解ASP.NET体系结构
- 只称量一次,如何判断哪个罐子的药被污染了?
- HDU3308->线段树区间合并
- And_Android Studio取消与SVN的关联/找不到Share Project(Subversion)
- 组网参考
- jquery ui sortable 拖动时位置错位
- Java后台---从底层了解Session会话、pageContext
- 智力问题--烧绳子
- JQUERY $.post()
- Spring和MyBatis整合
- Volley框架实现Android网络请求笔记
- 从移动平台应用看企业移动互联网转型
- 随机数
- cache的基本概念
- 顺序表应用1:多余元素删除之移位算法(链表实现)