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方法跳转。

热门文章

暂无图片
编程学习 ·

react-native 使用react-native-image-crop-picker上传图片、视频到服务端

博主主要卡在了上传数据这一步情景是这样的:每一次只允许选择一张图片,每次从相册中选择一图片点击右上角确定后,立即发送请求,上传该图片,并且下次再点击时,重复这个动作。(1)点击下图的上传资料(2)点击红框内的按钮(3)选择图片(4)选择完毕的同时,上传图片到服…
暂无图片
编程学习 ·

『杭电1251』统计难题

Problem DescriptionIgnatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师…
暂无图片
编程学习 ·

Eslint配置问题

Eslint配置问题rule规则配置解释Eslint问题解决方案 rule规则配置解释 "no-alert": 0,//禁止使用alert confirm prompt "no-array-constructor": 2,//禁止使用数组构造器 "no-bitwise": 0,//禁止使用按位运算符 "no-caller": 1,//禁止…
暂无图片
编程学习 ·

Leetcode 题解 - 字符串

字符串循环移位包含 编程之美 3.1 s1 = AABCD, s2 = CDAA Return : true给定两个字符串 s1 和 s2,要求判定 s2 是否能够被 s1 做循环移位得到的字符串包含。 s1 进行循环移位的结果是 s1s1 的子字符串,因此只要判断 s2 是否是 s1s1 的子字符串即可。 字符串循环移位 编程之美…
暂无图片
中恒嘉业 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
郑州普通话 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
代理记账 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
cgfy ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
coreui ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
未来博客 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
建站日记 ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快&#xff1f;它有哪些限制&#xff1f; 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库&#xff0c;像vue内置了动画处理、keep-alive等功能&#xff0c;react则需要去找第三方库…
暂无图片
mfbz ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
mfbz ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法&#xff01; 拓扑排序的过程中&#xff0c;由于需要查找所有以某顶点为尾的弧&#xff0c;即找到该顶点的所有出边&#xff0c;故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同&#xff0c;由于要查找入度为0的点…
暂无图片
珊珊日记 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
珊珊日记 ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法&#xff01; 拓扑排序的过程中&#xff0c;由于需要查找所有以某顶点为尾的弧&#xff0c;即找到该顶点的所有出边&#xff0c;故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同&#xff0c;由于要查找入度为0的点…