`
退役的龙弟弟
  • 浏览: 453842 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

session原理详解

 
阅读更多

2.验证码:
createcode代码如下:

package com.ru.dao;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CreateCode extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 // 7.禁止浏览器缓存随机图片
 response.setDateHeader("Expires", -1);
 response.setHeader("Cache-Control", "no-cache");
 response.setHeader("Pragma", "no-cache");
 // 6.通知客户机以图片方式打开发送过去的数据
 response.setHeader("Content-Type", "image/jpeg");
 // 1.在内存中创建一副图片
 BufferedImage image = new BufferedImage(60, 30,
 BufferedImage.TYPE_INT_RGB);
 // 2.向图片上写数据
 Graphics g = image.getGraphics();
 // 设背景色
 g.setColor(Color.BLACK);
 g.fillRect(0, 0, 60, 30);
 // 3.设置写入数据的颜色和字体
 g.setColor(Color.RED);
 g.setFont(new Font(null, Font.BOLD, 20));
 // 4.向图片上写数据
 String num = makeNum();
 //这句话就是把随机生成的数值,保存到session
 request.getSession().setAttribute("checkcode", num); //通过session就可以直接去到随即生成的验证码了
 g.drawString(num, 0, 20);
 // 5.把写好数据的图片输出给浏览器
 ImageIO.write(image, "jpg", response.getOutputStream());
 }
 //该函数时随机生成7位数字
 public String makeNum() {
 Random r = new Random();
 //9999999 可以生成7位
 String num = r.nextInt(9999) + "";
 StringBuffer sb = new StringBuffer();
 //如果不够4位,前面补零
 for (int i = 0; i < 4 - num.length(); i++) {
 sb.append("0");
 }
 num = sb.toString() + num;
 return num;
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 doGet(request, response);
 }
}

。。。。。。。。。。。。。。。。。。。。。。。
out.println("验证码 :<input type='input' name='vcode'><img src='/verificationcode/CreateCode'>");验证码的使用。
验证:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("utf-8");
String userid=request.getParameter("userid");
String password=request.getParameter("password");
String vcode=request.getParameter("vcode");
//获取session
HttpSession session=request.getSession();
String vcodenum=(String)session.getAttribute("checkcode");
if (session!=null&&vcode.equals(vcodenum)) {
request.getRequestDispatcher("/logsuccess").forward(request, response);
} else{
request.setAttribute("errinf", "vcodeerror");
request.getRequestDispatcher("/login").forward(request, response);
System.out.println("错误");
}
}
 
3.如果在ie中访问一个web,创建了一个session,我们想在关闭ie后再打开ie浏览器时得到这个session,
那么需要将ie中创建的session的JSESSIONID存储到cookie中去

session的工作原理和验证码

需要注意的是。当创建一个session服务器就会将这个session的 JSESSIONID 传到cookie中。但是由于这个cookie没有设置时间。所以当关闭浏览器,cookie就会消失。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//获取session
HttpSession httpsession=request.getSession();
//给session赋值
Users user=new Users();
user.setUsername("如");
user.setPassword("123456");
httpsession.setAttribute("userinf",user);
//将Jsessionid放到cookie中,这样关闭浏览器,在打开也可以直接访问创建好的session,用其他浏览器无法访问这个cookie
Cookie cookie=new Cookie("JSESSIONID",httpsession.getId());
cookie.setMaxAge(30*60);
response.addCookie(cookie);
//session的生命周期默认是30分钟
//httpsession.setMaxInactiveInterval(60);
out.println("session 'username' 已经创建<a href='/MySession1/session2'>跳转到session2</a>");

}
 

4.加入禁用了cookie,那么浏览器无法从cookie中得到jsessionid,就无法得到原来的session,我们可以认为的在url中传递jsessionid。(因为jsessionid存在为cookie中。但是禁用cookie后,无法保存 jsessionid 的cookie,所以当浏览器再发送请求时无法得到 jsessionid ,也就无法得到原来的session
//保证可以得到jsessionid,要先调用session
request.getSession();
//url地址重写
String url=response.encodeURL("/shopingcart/BuyBook?bookid="+books.getBookid());
for (Books books : al) {
out.print("<strong>"+books.getBookname()+"</strong><a href='"+url+"'> 点击购买</a><br/>");
}
 

session的工作原理和验证码
5、session的持久化
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zhaobest.blog.51cto.com/973281/957985

1.修改的文件: $\Tomcat_HOME\conf\context.xml

2.context.xml文件根节点下面添加以下内容:

  1. <Manager className="org.apache.catalina.session.PersistentManager" >  
  2. debug=0  
  3. saveOnRestart="true"  
  4. maxActiveSession="-1"  
  5. minIdleSwap="-1"  
  6. maxIdleSwap="-1"  
  7. maxIdleBackup="-1"  
  8. <Store className="org.apache.catalina.session.FileStore" directory="D:/" />  
  9. </Manager> 

3.如果session中存有javabean对象,需要该javabean实现Serializable接口、且包含空构造函数。


分享到:
评论

相关推荐

    Servlet Session机制详解

    Servlet Session机制详解,如题,详细描述Session的原理,及使用方法,附部分代码

    Cookie与session机制详解

    ### Cookie与Session机制详解 #### 一、Cookie与Session的概念及区别 在Web开发中,为了保持用户的状态信息,通常会用到两种技术:Cookie和Session。这两种技术都是用来跟踪用户的浏览活动,但它们的工作原理有所...

    Cookie、Session机制详解.doc

    Cookie、Session机制详解 Cookie机制是Web程序中常用的技术,用来跟踪用户的整个会话。Cookie通过在客户端记录信息确定用户身份。Cookie机制可以弥补HTTP协议的无状态特性,使服务器可以从客户端获取用户信息,以便...

    跨服务器session应用详解

    【跨服务器session应用详解】 在Web开发中,session机制是一种至关重要的技术,它允许服务器在多个请求之间跟踪用户的状态,从而实现动态交互和个性化服务。本文将深入探讨session的工作原理,以及如何在Java Web...

    详解SpringBoot中Session超时原理说明

    SpringBoot 中 Session 超时原理说明 在 SpringBoot 中,Session 超时是指在一定时间内没有任何操作,Session 就会超时失效,导致用户需要重新登录才可以继续访问页面。这是因为 Session 的超时时间是有限制的,...

    Session详解.doc

    ### Session详解 #### 一、引言 在Web开发领域,`Session`是一个核心概念,尤其是在涉及用户状态管理和个性化体验的场景中。虽然Session的概念和技术已经存在多年,但很多开发者仍对其工作原理和最佳实践不够熟悉...

    Session详解

    ### Session详解:深入探讨Web应用中的状态管理 #### Session的本质及其在Web开发中的角色 Session,中文常译为...然而,这也要求开发者对Session的工作原理有深入的理解,以便在实际项目中做出明智的设计决策。

    Cookie-Session机制详解.txt

    ### Cookie-Session机制详解 #### 一、引言 在Web开发中,为了实现服务器与客户端之间的会话管理,常用的技术之一就是Cookie-Session机制。本文将深入剖析Cookie-Session的工作原理及其在实际应用中的作用。 ####...

    Cookie,Session,Token详解.pdf

    根据提供的文件信息,以下是对文件《Cookie,Session,Token详解.pdf》中知识点的详细解读: 1. Cookie的相关知识 1.1 Cookie不是缓存。它是由服务器创建并存储在客户端的一小段文本信息,通常以字典(键值对)的...

    Cookie-Session机制详解.docx

    Cookie-Session 机制详解 Cookie 机制是 Web 程序中常用的技术,用来跟踪用户的整个会话。Cookie 通过在客户端记录信息确定用户身份。Cookie 的工作原理是当客户端请求服务器,如果服务器需要记录该用户状态,就...

    php5的session详解

    #### 二、Session 的工作原理 - **Session ID**:服务器会为每个用户分配一个唯一的标识符(Session ID),用来区分不同的用户会话。 - **Session 数据存储**:服务器端会创建一个存储空间来保存每个用户的会话数据...

    Jsp_Session详解.

    在本文中,作者详细解释了Session的概念、工作原理以及在Java Web应用中的实现方式,并对常见的问题进行了解答。同时,作者也探讨了HTTP协议、Cookie机制以及它们与Session机制的关系。最后,文章还讨论了跨应用程序...

    PHP5 session 详解

    ### PHP5 Session 详解 #### 一、HTTP 协议与 Session 的必要性 HTTP(HyperText Transfer Protocol)协议作为 Web 服务器与客户端之间通信的基础协议,其本质特征之一是无状态性。这意味着每次 HTTP 请求都是独立...

    Session详解(主要讲Session跟Cookic区别)

    ### Session与Cookie的区别详解 #### 一、Session与Cookie的基本概念 **Session**与**Cookie**都是Web开发中用于在客户端与服务器之间维持状态的重要工具。它们各自具有独特的特性和应用场景,下面我们将深入探讨...

    JSP 中Session的详解及原理分析

    本文将深入讲解JSP中Session的原理和使用方法,并对比它与Cookie的区别。 首先,我们来了解Session的基本概念。Session是服务器端的一种机制,用于存储特定用户会话期间的信息。每当用户打开浏览器访问网站,服务器...

    Session机制详解(jsp-servlet_技术)文.pdf

    【Session机制详解】 Session机制是Web应用程序中用于保持客户端与服务器之间状态的一种技术。在HTTP协议下,由于其无状态的特性,每次请求之间是相互独立的,这意味着服务器无法识别同一用户的不同请求。为了实现...

    session详解

    ### Session详解 #### 一、术语session 在讨论session机制之前,有必要先澄清“session”这一术语的不同含义。在IT领域尤其是Web开发中,“session”的概念常常被提及,但其确切含义却因上下文的不同而有所变化。 ...

    session和cookie详解

    ### Session与Cookie详解 #### 一、Session与Cookie的基本概念 **Session** 和 **Cookie** 是Web开发中用于保持客户端与服务器之间会话状态的重要技术。由于HTTP协议本身是无状态的,即服务器无法自动记录客户端的...

Global site tag (gtag.js) - Google Analytics