session技术
来源:互联网 发布:php html转markdown 编辑:程序博客网 时间:2024/06/08 12:00
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。
Session和Cookie的主要区别
Cookie是把用户的数据写给用户的浏览器。
Session技术把用户的数据写到用户独占的session中。
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
session实现原理
package cn.hncu.servlet2;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class SaveServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); // 把name分别存入3个容器中 request.setAttribute("name", name + "_request"); request.getSession().setAttribute("name", name + "_session"); ServletContext application = getServletContext(); application.setAttribute("name", name + "_application"); }}
package cn.hncu.servlet2;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Random;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class GetServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); String requestName = (String) request.getAttribute("name"); out.println("request:" + requestName); // request代表一次请求 每次都是独立的 String sessionName = (String) request.getSession().getAttribute("name"); out.println("sesstion:" + sessionName); // 该浏览器中多个请求甚至是多个页面是共享同一个session容器的 // 如果关闭浏览器再打开,则是另一个session容器 String ApplicationName = (String) getServletContext().getAttribute( "name"); out.println("application:" +ApplicationName); // application:代表一个项目,不但是多个请求 甚至是多个用户(都是共享该容器) // 只要tomcat不关闭这个容器一直存在 out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close();}}
浏览器中多个请求甚至是多个页面是共享同一个session容器的如果关闭浏览器再打开,则是另一个session容器
当用户退出某个系统但没关闭浏览器时,session其实还会存在一段时间,为了安全性考虑,当用户退出后,应该销毁掉session
package cn.hncu.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class LogOutServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); // 安全退出 HttpSession s = request.getSession(); s.invalidate();// 让sesstion对象失效 response.sendRedirect("index.jsp"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); }}
本来,浏览器关闭之后重启。上一次的用户临时信息是访问不了的 把cookie和session技术联合起来,实现让用户不小心关闭浏览器,页面数据不丢失,用户的临时信息还能在5分钟之内重启浏览器有效 我们在服务器端写代码手动创建一个名为JSESSIONID=。。。的普通cookie,发向客户端
String id = request.getSession().getId();// 拿到该用户的session id Cookie c = new Cookie("JSESSIONID", id); c.setMaxAge(60 * 5); c.setPath(request.getContextPath()); response.addCookie(c);
阅读全文
0 0
- Session技术
- Session技术
- Session技术
- Session技术
- Session技术
- session技术
- Session技术
- Session技术
- Session技术
- session技术
- SESSION技术
- cookie技术、session技术总结
- Session技术详解
- session 相关技术
- session 相关技术
- session、cookie技术
- Session的技术小结
- 黑马程序员 Session技术
- 面试问题:进程与线程的区别和联系
- (60)StringBuffer:特点、存储、删除、获取、修改
- Qt中的JSON支持
- day01之合并两个有序链表+实现1+2+3...+n要求不能使用乘除法循环条件判断等
- redis的持久化
- session技术
- centos中/etc/issue的字符格式
- Unity简单的声音切换渐变实现
- Spark2.X源码学习--从SparkContext创建分析AppClient注册
- 【哈希表】关于map
- 数值的整数次方
- Java异常处理
- tomcat环境配置
- 判断101-200之间有多少个素数,并输出所有素数。