当前位置: 首页 > news >正文

会话跟踪cookie和session

什么是会话跟踪技术

会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可能包含多次请求和响应。 

会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一个浏览器,以便于在多次请求间共享数据。

我们知道:http协议是一种无状态的协议。多次请求之间的数据无法共享。每次浏览器向服务器发送请求,服务器都会将这个请求看作全新的请求。这是为了传输的效率所考虑的。那么为了解决一次会话中数据无法共享的问题,我们需要使用会话跟踪技术。

实现方式:

客户端cookie和服务器端session

 Cookie的基本使用

Cookie:客户端会话技术,将数据保存到客户端,以后每次请求携带cookie数据进行访问。

Cookie原理

Cookie是基于http协议实现的

响应头:set-cookie

请求头:cookie 

Cookie使用细节:

Cookie存活时间:

默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,Cookie被销毁。

setMaxAge(int seconds):设置Cookie的存活时间。

1、正数:将Cookie写入电脑的硬盘中,持久化存储,到时间自动删除。

2、负数:默认值,Cookie存储在浏览器内存中, 当浏览器被关闭,Cookie被销毁。

3、零:删除对应的Cookie。

cookie不可以存储中文:

想要存储中文,我们可以将中文转换成url格式,再需要的时候解码回来。

String value="小明";
//编码
String tem=URLEncoder.encode(value,"UTF-8");
//解码
URLDecoder.decode(tem,"UTF-8");

Session使用细节:

服务端会话跟踪技术:将数据保存到服务端。

JAVA EE提供HttpSession接口,来实现一次会话多次请求间数据共享功能。

使用:

1、获取Session对象

HttpSession session=request.getSession();

2、session对象的功能

存储数据到session域中

void setAttribute(String name,Object o);

根据key,获取值

Object getAttribute(String name);

根据key,删除获得键值对

void removeAttribute(String name);

Session原理

Session是基于cookie实现的。

客户访问服务器获取session对象,每一个session都有一个唯一的id标识,只要你访问了session,服务器会自动的将session的id变做一个cookie发送给浏览器。

下一次浏览器访问服务器时,服务器监测到cookie包含session的id,会去寻找是否有这个id对应的session,没有的话会创建对应的session。

 Session使用细节:

Session钝化和活化:

服务器重启后,Session中的数据是否还存在?

钝化:在服务器正常关闭后,Tomcat会自动的将Session数据写入硬盘的文件中。

活化:再次启动服务器时,从文件中加载数据到session中。

Session的销毁:

默认情况下三十分钟会自动销毁。

<session-config><session-timeout>30</session-timeout>
</session-config>

调用Session对象的invalidate()方法可以立即销毁Session。

总结 

cookie通常用来登陆验证这些操作,而session则时登陆以后的操作。

http://www.lryc.cn/news/89936.html

相关文章:

  • ACS Cent. Sci 2018 | 数据驱动的分子连续表征的自动化学设计
  • 安卓Termux搭建web服务器【公网远程手机Android服务器】
  • 【大数据之Hive】二、Hive安装
  • 三大特性之多态
  • 单调队列优化dp
  • 【低压配电漏电继电器660V/LLJ-100H/AC220V 中性点漏电保护 JOSEF】
  • [数据结构习题]栈——中心对称链
  • AMD Software Adrenalin Edition 23.5.1驱动发布,快速获取驱动
  • Visual Studio内引用Lua解释器,编译Lua源码,执行Lua脚本
  • 【赏】C语言迷宫游戏设计如何解决屏幕严重刷屏问题同时实现运行时间的显示
  • Spring Boot如何实现接口文档自动生成
  • 二进制概述-0day漏洞利用原理(1)
  • 加密与解密 调试篇 动态调试技术 (二)-常见断点
  • 【JavaScript】拾遗(5.25)
  • QMI8658 - 姿态传感器学习笔记 - Ⅲ
  • PHP+vue二手车交易信息网站系统
  • NTM中attr的用法
  • 【python资料】pandas的条件查询
  • 中间件(三)- Kafka(二)
  • DAY01_MySQL基础数据类型navicat使用DDL\DML\DQL语句练习
  • 数据安全复合治理框架和模型解读(0)
  • Java程序设计入门教程--逻辑运算符和位运算符
  • 接口测试简介以及接口测试用例设计思路
  • C++ Qt项目实战:构建高效的代码管理器
  • 【JavaScript 递归】判断两个对象的键值是否完全一致,支持深层次查询,教你玩转JavaScript脚本语言
  • 卷积、相关、匹配滤波、脉冲压缩以及模糊函数
  • C# 栈(Stack)
  • 网络流量监控及流量异常检测
  • 六.热修复
  • 2000万的行数在2023年仍然是 MySQL 表的有效软限制吗?