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的更多相关文章
随机推荐
- [转]监控常用TCODE
1 系统监视 1.1 进程监视 SM66/SM50 进程查看 管理员需全天监看系统的进程.长时间运行的后台工作,有缺陷的报表程序,若不进行控制都将消耗掉大量的系统资源.管理员用这个事务码检查他们的环 ...
- QCTF 2018线上赛 writeup
本次算是被QCTF打趴了,本来做题时间就少(公司无限开会,开了一天,伪借口),加上难度和脑洞的增大,导致这次QCTF又酱油了...就连最基本的签到题都没做出来...这就很气 好了,以下是解题思路 MI ...
- 源码分析(一) 进程cleos的命令解析
EOS版本:4.0 一.进程cleos的作用 cleos,即为client eos.从名字就可以猜出来,它是一个标准的客户端程序,而实际上,它也确实为一个标准的client^_^ 准确地说 ...
- 深入浅出面向对象分析与设计读书笔记一&吉他搜索案例&吉他特性锚点集中&委托&重用&业务阶段&需求列表&用例
案例:吉他搜索Guitar Inventory GuitarSpec需求变化:增加吉他弦数特性原始程序需要的变化: 1.修改GuitarSpec,构造,成员,getter 2.修改Guitar,构造, ...
- 《SQL 进阶教程》 case:在 UPDATE 语句里进行条件分支
1.对当前工资为30万日元以上的员工,降薪10%:2.对当前工资为25万日元以上且不满28万日元的员工,加薪20% update salaries set salary = case when sal ...
- CC01:确定字符互异
题目 请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,Fal ...
- shell中括号总结: {}, (), (()), [], [[]]
括号总结 () 单小括号 命令组,括号中的命令将会开一个新的子shell执行 括号中变量不能被剩下脚本使用 命令之间分号隔开 命令和括号之间可以没有空格 命令替换,等同于``反引号 $(xxx)会被替 ...
- 学习flask的网址
学习flask的网址: http://www.bjhee.com
- 简单记录下SpringCloud的微服务架构和一些概念
一.微服务的注册与发现——Eureka 和许多分布式设计一样,分布式的应用一般都会有一个服务中心,用于记录各个机器的信息.微服务架构也一样,我们把一个大的应用解耦成这么多个那么多个服务,那么在想要调用 ...
- js解析url参数
1.采用正则,这也是现在使用最为方便的 function getQueryString(name) { const reg = new RegExp("(^|&)" + n ...