01_8_session
01_8_session
1. session总结
1.1服务器的一块内存(存key-value)
1.2和客户端窗口对应(子窗口)(独一无二)
1.3客户端和服务器有对应的SessionID
1.4客户端服务器端发送SessionID的时候两种方式
- cookie(内存cookie)
- rewrite URL
1.5浏览器禁掉cookie,就不能使用session(使用cookie实现session)
1.6如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),很多网站要求客户端打开cookie
2.例子
2.1ShowSession.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
String title = "Session Tracking Example";
HttpSession session = request.getSession(true);
String heading;
Integer accessCount = (Integer) session.getAttribute("accessCount");
System.out.println(accessCount);
if (accessCount == null) {
accessCount = new Integer(0);
heading = "Welcom, Newcomer";
System.out.println(accessCount);
} else {
heading = "Welcome Back";
accessCount = new Integer(accessCount.intValue() + 1);
}
session.setAttribute("accessCount", accessCount);
/*Integer access = (Integer) session.getAttribute("accessCount");
System.out.println(access);*/
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>Session追踪</TITLE></HEAD>");
out.println(" <BODY>");
out.print("<H1 ALIGN=\"CENTER\">" + heading + "</H1>");
out.print("<H2 ALIGN=\"CENTER\">Information on Your Session:</H2>");
out.println("<TABLE BORDER=\"1\" ALIGN=\"CENTER\"><TR><TH>Info Type</TH><TH>Value</TH></TR><TR><TD>Creation Time</TD><TD>" + new Date(session.getCreationTime())+ "</TD></TR><TR><TD>Time of Last Access</TD><TD>" + new Date(session.getLastAccessedTime()) + "</TD></TR><TR><TD>Number of Previous Accesses</TD><TD>" + accessCount+ "</TD></TR></TABLE>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
2.2SessionInfoServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(true);
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>Session Info Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print("<H3>Session Information</H3>");
out.print("New Session:" + session.isNew());
out.println("<BR/>Session ID:" + session.getId());
out.println("<BR/>Session Creation Time:" + new Date(session.getCreationTime()));
out.println("<BR/>Session Last Accessed Time:" + new Date(session.getLastAccessedTime()));
out.println("<H3>Request Information</H3>");
out.println("Session ID from Request:" + request.getRequestedSessionId());
out.println("<BR/>Session ID Via Cookie:" + request.isRequestedSessionIdFromCookie());
out.println("<BR/>Session ID Via rewritten URL:" + request.isRequestedSessionIdFromURL());
out.println("<BR/>Valid Sesion ID:" + request.isRequestedSessionIdValid());
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
2.3URLSession.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(true);
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>Session 追踪</TITLE></HEAD>");
out.println(" <BODY>");
out.print("session id:" + session.getId() + "<br/>");
out.print("from url:" + request.isRequestedSessionIdFromUrl() + "<br/>");
out.print("from cookie:" + request.isRequestedSessionIdFromCookie() + "<br/>");
out.println("<a href=" + response.encodeURL(request.getRequestURL().toString()) + "> test </a><br/>");
out.println("<a href=" + request.getRequestURL().toString() + "> test </a><br/>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
01_8_session的更多相关文章
随机推荐
- 2014 Noip提高组 Day2
P2038 无线网络发射器选址 [题目描述] 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 ...
- 程序员收藏必看系列:深度解析MySOL优化(一)
说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作原理? ...
- vue+element级联选择器对接后台数据
1.后台接口返回的数据肯定要和级联选择器的数据一致,所以我专门弄个model存放返回的值,如下:/** * @Auther: GGDong * @Date: 2019/4/3 10:30 */@Get ...
- 数学补天 By cellur925
质数 bool prime(int q) { ||q==) ; ) ; !=||q%!=) ; int cnt=sqrt(q); ;i<=cnt;i+=) !=||q%(i+)!=) ; ; } ...
- 2、linux基础知识与技能
2.1.linux内核.发行版linux本身指的是一个操作系统内核,只有内核是无法直接使用的.我们需要的,可以使用的操作系统是一个包含了内核和一批有用的应用程序的一个集合体,这个就叫linux发行版. ...
- dynomite:高可用多数据中心同步
https://github.com/Netflix/dynomite Dynomite, inspired by Dynamo whitepaper, is a thin, distributed ...
- SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(一)
当前后端分离时,权限问题的处理也和我们传统的处理方式有一点差异. 笔者前几天刚好在负责一个项目的权限管理模块,现在权限管理模块已经做完了,我想通过5-6篇文章,来介绍一下项目中遇到的问题以及我的解决方 ...
- c#基础 里氏转换
1.里氏转换1).子类可以赋值给父类2).如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象. 2.子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员. //// 1.里氏转换 ...
- JAVA基础之字节流与字符流
个人理解: IO流就是将数据进行操作的方式,因为编码的不同,所以对文件的操作就产生两种.最好用字节流,为了方便看汉字等,(已经确定文字的话)可以使用字符流.每个流派也就分为输入和输出,这样就可以产生复 ...
- JVM垃圾回收机制四
GCRoots与可达性分析 Java中的四种引用 强引用.软引用.弱引用.虚引用.这四种引用的强度是逐渐减弱的,JVM垃圾回收的力度是逐渐增强的. 四种引用的作用 1.可以让程序员通过代码来控制对象的 ...