Web会话管理

1.会话管理基本原理
1.隐藏域
将表单中的内容在显示页面时隐藏,不显示数据,在JSP 中将input标签type设置为hidden 生成一个隐藏表单域。将会话的唯一标识记录到隐藏域中的value值中,并设定name值。提交给服务器之后,服务器会根据根据会话标识找到会话对象。
缺点:实现比较麻烦,安全性差,不适合隐秘性的数据
2.cookie
服务端保存会话对象中设定会话的唯一标识,客户端将会话标识存在cookie中,当浏览器发送请求时从cookie取得会话标识发给服务端。
3.URL重写
在URL地址末尾添加会话标识,改写原先的URL地址,唯一标识会话的信息以参数的形式添加到URL中,主要使用在浏览器cookie被禁用的情况下。
缺点:整个Web应用中,超链接或者脚本中用到URL需添加会话标识,Web应用中每个页面都需要动态生成,当客户端访问静态页面时,会话标识会丢失,重回动态页面时不能继续此前会话。
禁用cookie
在Web项目中禁用 打开或者创建context.xml文件

<?xml version="1.0" encoding = "utf-8"?>
<Context cookies = "false" path = "/ch06">//这里是对单个项目的Cookie禁用
</Context>

HttpSession会话管理
每个请求者对应一个Session对象,客户端所有状态信息都保存在该对象里,第一次请求服务器时创建Session对象。
对于Servlet中

HttpSession session = request.getSession();//获取session对象
session.setAttribute("","");//设置session中的属性

对于JSP中内置Session对象
HttpSession的生命周期
1.HttpSession对象的创建
客户端第一次访问服务器时,服务器为每个浏览器创建不同的SessionID值
2.HttpSession对象的使用
在创建HttpSession对象后,使用Session对象进行数据的存取和传输
(1).将创建的SessionID值存到cookie中
(2).当客户端再次发起请求时,会将SessionID与request一起发送给服务器
(3).服务器根据请求过来的SessionID与保存在服务器端的Session对应起来
3.HttpSession对象的消亡
(1).将浏览器关闭
(2).调用HttpSession的invalidate()方法
(3).Session超时
HttpSession的有效期
为Session设定一个有效器,当某用户访问session超过这个有效期那么session失效,将它从内存清除。
(只有访问JSP,Servlet时才会创建session,访问静态页面时是不会创建session对象)
设置有效期:
1.在对应的Web服务器配置中设置所有session的有效期
2.调用session中的setMaxInactiveInterval(long interval)进行设定
在web.xml中修改

<session-config>
	<!--会话时长为30分钟-->
	<session-timeout>30</session-timeout>
</session-config>	

HttpSession会话管理实例演示
jsp源代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("utf-8");
    String message = "";
    String flag = request.getParameter("flag");
    if ((flag!=null)&&(flag.equals("small"))){
        message = "太小了";
    }else if((flag!=null)&&(flag.equals("big"))){
        message = "太大了";
    }else if ((flag!=null)&&(flag.equals("success"))){
        message = "猜对了";
    }
%>
<html>
<head>
    <title>猜数字</title>
</head>
<body>
    <form action="<%=request.getContextPath()%>/test" method="post">
        请输入你的数字:<input type="text" name="number"/>
        <span style="color: red"><%=message%></span>
        <input type="submit" value="提交">
    </form>

</body>
</html>

.java源码

 public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
        request.setCharacterEncoding("utf-8");
        String gussnumber = request.getParameter("number");
        int number = Integer.parseInt(gussnumber);
        HttpSession session = request.getSession();
        Integer currnumber = (Integer) session.getAttribute("currnumber");
        if(currnumber ==null){
            currnumber = 1+(int)(Math.random()*50);
            session.setAttribute("currnumber",currnumber);
        }
        if(number>currnumber){
            RequestDispatcher re = request.getRequestDispatcher("/until6HttpSession随机数.jsp?flag=big");
            re.forward(request,response);
        }else if(number<currnumber){
            RequestDispatcher re = request.getRequestDispatcher("/until6HttpSession随机数.jsp?flag=small");
            re.forward(request,response);
        }else {
            RequestDispatcher re = request.getRequestDispatcher("/until6HttpSession随机数.jsp?flag=success");
            re.forward(request,response);
        }
    }

主要是使用Math.random方法产生1~50的随机数,并将它保存在session中。判断逻辑之后,利用RequestDispatcher中的forward方法跳转。

热门文章

暂无图片
编程学习 ·

javaScript之ES6

ES6新增的内容 新增的let和constlet num1 = 10console.log(num1) //10const num2 = 10console.log(num2) //10let const声明变量和 var声明变量的区别:用let 和const 声明的变量不会进行预解析,只能先声明后使用 用let 和const 不能重复声明同一个变量 用let 和const声明 变…
暂无图片
编程学习 ·

python从入门到放弃篇8(while True的使用,列表,if嵌套)实现选举小程序

今天,我又开始了新的征程,开始学习Java,但是老本不能忘,所以,我打算先把python的全套入门到放弃做完,再开始Java的新篇章,我刚刚装了Java的Esclipe编辑器全英文,还不太适应,过一段时间,慢慢熟悉,应该就会好起来了。路一步步走,饭一口口吃。 while循环,我是很喜欢的…
暂无图片
编程学习 ·

Python之OpenCV的学习(二)

图像 1.OpenCV读取图像的格式是BGR 2.shape属性 # 返回一个[h,w,c]元组,即height,width,通道数 img_shape = img.shape img_shape1 = img_shape[0] img_shape2 = img_shape[1] img_shape3 = img_shape[2]3.彩色图像与灰度图像 # cv2.IMREAD_COLOR; 彩色图像 # cv2.IMREAD_GRAY…
暂无图片
编程学习 ·

SSCMS部署Linux

一、进入手册:https://sscms.com/ 二、在首页点击,如下位置:三、点击快速上手,进入页面如下:四、点击linux中运行SSCMS https://sscms.com/docs/v7/getting-started/using-linux.html#_1%E3%80%81%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96%E5%8C%85 根据里面的步骤一步步进行…
暂无图片
编程学习 ·

ASP.NET Core2.0项目实战-003

Views布局(Layouts)视图组件(ViewComponents)分部视图(PartialViews)HTML助手(HtmlHelpers) 页面标签的辅助类Tag助手(TagHelpers)配置全部视图(Global view configutation)视图找的时候如果home里面没有还会找shared文件夹里面的using System; using System.Colle…
暂无图片
编程学习 ·

前端适配问题总结

前端适配问题总结视口布局的优点:宽度和高度全部自动适应!再加上rem布局的字体适应,可以完美解决各种屏幕适配问题!1.vw:1vw等于视口宽度的1%。2.vh:1vh等于视口高度的1%。3.vmin:选取vw和vh中最小的那个。4.vmax:选取vw和vh中最大的那个。vh and vw:相对于视口的高度…
暂无图片
编程学习 ·

练习2-1 Programming in C is fun! (5分)

练习2-1 Programming in C is fun! (5分) 本题要求编写程序,输出一个短句“Programming in C is fun!”。 输入格式: 本题目没有输入。 输出格式: 在一行中输出短句“Programming in C is fun!”。 #include <stdio.h>int main() {printf("Programming in C is fun…
暂无图片
编程学习 ·

js实现复制并能保留原格式粘贴

使用textarea能粘贴的时候保留原格式。使用input粘贴的时候格式会丢失。const input = document.createElement(textarea);document.body.appendChild(input);input.value = “复制我呀”;// input.setAttribute(value, "复制我呀");input.select();if (document.ex…
暂无图片
编程学习 ·

Python简介和安装

Python简介 Python是一种跨平台的计算机程序设计语言。是由荷兰著名的“龟叔(Guido van Rossum)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言,是用龟叔喜欢看的一个马戏团来命名。在TIOBE排行榜中Python,C语言和JAVA一直位于前三甲,是非常流行的编程语言…
暂无图片
编程学习 ·

Java设计模式-单例模式(全例记录)

1. 基础介绍核心作用:保证一个类只有一个实例,并提供一个访问该实例的全局访问点; 优点:由于单例模式只生成一个实例,所以减少了系统的开销,当一个系统启动需要较多的资源时,可以直接在系统启动时产生一个单例对象,然后使其永久驻留内存;单例模式可以在系统设置全局访…
暂无图片
编程学习 ·

小程序学习之路五:scroll-view实现多列布局

上面讲解了一些部分简单功能,接下来讲讲scroll-view的进阶,实现多列布局,先上效果:首先来看看布局文件<scroll-view class="scroll"><view class="item" wx:for={{datas}} wx:key=index wx:for-item="item" data-item="{{item…
暂无图片
编程学习 ·

一些个人感觉很不错的特效

html5 canvas绘制3D森林场景拖动特效https://www.mk2048.com/demo/demo_target_desc_h0ccka0cib.html基于canvas 卡通风格的3D森林场景拖动旋转展示特效。video.js在线视频播放器插件点击》video.js在线视频播放器插件html5 video.js mp4视频播放器插件支持点击全屏、播放 spac…
暂无图片
编程学习 ·

2020李宏毅学习笔记——33.Network Compression(2_6)

3.为什么要pruning? 首先有一个问题:既然最后要得到一个小的network,那为什么不直接在数据集上训练小(有local minima的问题)的模型,而是先训练大模型?解释一:模型越大,越容易在数据集上找到一个局部最优解,而小模型比较难训练,有时甚至无法收敛。 解释二:2018年的…
暂无图片
编程学习 ·

HDFS架构

五.HDFS架构大多数分布式大数据框架都是主从架构HDFS也是主从架构Master|Slave或称为管理节点|工作节点主叫NameNode,中文称“名称节点”从叫DataNode,中文称“数据节点”5.1 NameNode5.1.1 文件系统file system文件系统:操作系统中负责管理文件、存储文件信息的软件具体地说…
暂无图片
编程学习 ·

Java Spring Shiro 安全框架:(八)加密算法

加密算法1.手动处理数据时,自行使用MD5加密2.使用Shiro的MD5方式进行加密在身份认证的过程中往往都会涉及到加密,如果不加密,这个时候信息就会非常的不安全,shiro 中提供的算法比较多 如 MD5 SHA 等1.手动处理数据时,自行使用MD5加密 package com.shiro3;import org.apache.s…
暂无图片
编程学习 ·

JAVA中的集合(概述)

JAVA中的集合(概述)什么是集合,有什么用? 数组其实就是一个集合,集合实际上就是一个容器,可以用来容纳其他类型数据集合为什么说在开发中使用较多? 集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库, 数据库中有10条记录,那么假设把这…
暂无图片
编程学习 ·

登录小Demo(错题记录)

Demo描述:实现C3P0数据库池连接数据库。部署Tomcat服务器,使用servlet完成简单登录测试。错误描述:测试时,登录账号名和密码与数据库表中信息一致。但是提示登录失败,控制台无错误提示。产生原因:细节问题。忽略了setCharacterEncoding设置字符的编码方式.注意点:1.setC…
暂无图片
编程学习 ·

专业外语学科复习总结

文章目录英译汉选择题Unit 1-ExcerciseUnit 2-ExerciseUnit 3-ExerciseUnit 4- ExerciseUnit 5- ExerciseUnit 6- ExerciseUnit 7- Exercise阅读题作文阶段性巩固练习(unit1~3)阶段性巩固练习(unit4~5)阶段性巩固练习(unit6~7) 英译汉 OS also manage files on computer hard d…
暂无图片
编程学习 ·

UE4学习-添加机关并添加代码控制

文章目录添加机关代码编写给密室添加屋顶打印日志控制系统角色创建一个新游戏模式替换DefaultPawn添加抓取组件获取起点和终点物体拾取,碰撞属性设置今日完整代码 添加机关 首先向场景里面添加一个聚光源添加聚光源以后,可以对其属性进行修改,如图:然后需要给聚光源添加一个…