【Session、Cookie记录登录状态】

JAVA - 【Tomcat】Servlet Cookie与Session 目录 Cookie cookie是什么? javax.servlet.http.Cookie 获取与添加 示例:上次访问时间 Session <一> Cookie 1> cookie是什么? 客户端技术,服务器将每个用户的数据以cookie的形式写给各自的浏览器; 会话级别cookie(MaxAge=-1) 本地cookie(MaxAge>0) 删除cookie(MaxAge=0) 2> javax.servlet.... 阅读详情

一、Cookie的机制

Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能。

Cookie的 Domain 和 Path 属性标识了这个Cookie是哪一个网站发送给浏览器的;Cookie的 Expires 属性标识了Cookie的有效时间,当Cookie的有效时间过了之后,这些数据就被自动删除了。

如果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,Cookie就消失了。这种生命期为浏览会话期的 Cookie被称为会话Cookie。会话Cookie一般不保存在硬盘上而是保存在内存里。如果设置了过期时间,浏览器就会把Cookie保存到硬盘 上,关闭后再次打开浏览器,这些Cookie依然有效直到超过设定的过期时间。存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗 口。而对于保存在内存的Cookie,不同的浏览器有不同的处理方式。(设置age为负数就是窗口cookie,设置0删除cookie,设置正数存活的时间)

 

二、Session机制

Session是存放在服务器端的类似于 HashTable 结构来存放用户数据,当浏览器第一次发送请求时,服务器自动生成了一个HashTable 和一个 Session ID 用来唯一标识这个HashTable,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的 Session ID 放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。

一般情况下,服务器会在一定时间内保存这个HashTable,过了时间限制,就会销毁这个HashTable。在销毁之前,程序员可以 将用户的一些数据以Key和Value的形式暂时存放在这个HashTable中。当然,也有使用数据库(redis)将这个HashTable序列化后保存起来的,这样的好处是没了时间的限制,坏处是随着时间的增加,这个数据库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。

详解

浏览器第一次请求服务器时,服务器会生成一个sessionId,并返回给浏览器,这个sessionId会被保存在浏览器的会话cookie中。如下图

在浏览器不关闭的情况下,之后的每次请求请求头都会携带这个sessionId到服务器。如下图

session在服务器的默认有效时间是30分钟,可以通过3种方式去设置session的过期时间

下面通过代码的方式设置session过期时间为180秒

request.getSession().setMaxInactiveInterval(30*6);

在第二次请求3分钟后我们进行第三次请求,这个时候服务器中原有的session已经过期,所以服务器会生成一个新的sessionId返回给浏览器,并替换掉cookie中之前的sessionId,第三次请求cookie携带的还是之前的sessionId。如下图

浏览器再次请求,cookie就会携带新的sessionId到服务器,如下图

通过sessionId我们可以做登陆过期,会话期间无需二次登陆等功能。

 

三、Session的客户端实现形式(即Session ID的保存方法)

[1] 使用Cookie来保存,这是最常见的方法。服务器通过设置Cookie的方式将Session ID发送到浏览器。如果我们不设置这个过期时间,那么这个Cookie将不存放在硬盘上,当浏览器关闭的时候,Cookie就消失了,这个Session ID就丢失了。如果我们设置这个时间为若干天之后,那么这个Cookie会保存在客户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同 样会发送到服务器上。

[2] 使用URL附加信息的方式,也就是像我们经常看到JSP网站会有aaa.jsp?JSESSIONID=*一样的。这种方式和第一种方式里面不设置 Cookie过期时间是一样的。

[3] 第三种方式是在页面表单里面增加隐藏域,这种方式实际上和第二种方式一样,只不过前者通过GET方式发送数据,后者使用POST方式发送数据。但是明显后 者比较麻烦。

 

四、实现“记住我的登录状态”的功能

如果我们将Session ID通过Cookie发送到客户端的时候设置其过期时间为1年,那么在今后的一年时间内,客户端访问我的网站的时候都回将这个Session ID值发送到服务器上,服务器根据这个Session ID从内存或者数据库里面恢复存放Key-Value对的Hashtable。其实这已经很好的实现了我们的功能了。但是,前面也提到了,实际上Session并不会一直都存在的,过了一定的时间之后,服务器上的Session就被 销毁了,以减轻服务器的访问压力。当服务器上的数据被销毁后,即使客户端上存放了Cookie也没有办法“记住我的登录状态”了。

通用的实现办法是,将用户的用户名和加密之后的密码也通过Cookie的方式存放在客户端,当服务器上的Session销毁以后,使用Cookie里面存 放的用户名和加密之后的密码重新执行一次登录操作,重建Session,并更新客户端上Cookie中存放的的Session ID,而这个操作是发生在用户请求一个需要身份验证的页面资源的背后,对于用户来讲是透明的,于是就达到了“记住我的登录状态”的目的了。

【拓展】Session ID 与 Token 基本一致!

session实现记录用户登录状态 用session记录用户的登录状态 1.登录 2.登录成功后将此“已登录”状态保存。 3.实现“显示员工列表”功能。 4.当用户点击“显示员工列表”的时候,验证用户是否已登录,已登录继续显示员工列表,没有登录则跳转到登录页面。 5.退出系统功能。 立即下载

相关推荐

哈工大集合论与图论(下)慕课MOOC答案

答案选自2023哈工大集合论与图论慕课,慕课的题重复率很高并且具有极高的相似性,选答案时要格外注意对比选项,能力有限答案不一定面面俱到,整理不易读者且用且珍惜。

qq_34168477的博客 2904

基于session对象实现用户登录系统

session对象实现用户登录系统。

m0_65651864的博客 8534

别再手动建模了!用Simscape Multibody Link一键导入SolidWorks装配体到Simulink

本文介绍了如何利用Simscape Multibody Link插件将SolidWorks装配体一键导入Simulink,实现CAD到仿真的无缝衔接。该技术显著提升机械系统设计与控制效率,特别适用于工业机器人、车辆悬架等复杂机构的动力学分析。文章详细解析了插件安装、模型导出优化及仿真验证的全流程,帮助工程师摆脱手动建模的低效工作模式。

weixin_27256197的博客 463

Session 记录登陆状态

package com.java.contorller; import org.springframework.http.HttpRequest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.

charxupengfei的博客 451

智能车八邻域图像算法_二

智能车八邻域图像算法 文章目录智能车八邻域图像算法前言一、一些想法二、生长方向的使用1.点的生长方向的表示2. 用点的生长方向来做初步判断1.引入库2.读入数据总结 前言 上一篇里面讲过用八邻域来获得赛道边界:智能车八邻域图像算法 当已经能稳定获得赛道边界时,就可以进行元素识别,获得偏差了。 这里就介绍一下我的一些思路。 早在前两年,优快云上就有一篇关于八邻域如何处理元素的文章第十五届全国大学生智能汽车竞赛-双车组三轮图像处理总结,写得很好,我当时也参考了这篇文章,但是我觉得不是很详细,所以我这里想写得

技术缝合怪的博客 1万+

Unity3D实战:5分钟搞定RTSP监控视频播放(附完整代码)

本文提供了一套在Unity3D中快速集成RTSP监控视频播放的实战方案。通过采用LibVLCSharp for Unity这一成熟稳定的跨平台中间件,开发者可以轻松实现RTSP流的解码与渲染,并附有完整的C#代码示例,帮助用户在5分钟内完成集成,适用于智慧园区、安防监控等3D可视化场景。

weixin_29001655的博客 192

关于用户session和cookie的思考--三种登录状态--上

文章目录设置一个cookie过期时间,在cookie没有过期但是session过期的时候可以直接登录生成新的session,除非用户主动退出,这时候需要清除cookie信息私人电脑可以使用localStorage在浏览器设置保存自己多次登录的不同用户身份和密码,在cookie过期的时候依然可以记住密码直接登录在公共电脑,不登录直接进入,不适应用户名和密码直接进入的时候是需要清除cookie里的用户信息防止误用的localStorage的使用使用localStorage处理一个登录页面实现在一个复选框不勾选的

weixin_46045444的博客 1533

C# WinForms实战:5分钟用ScottPlot打造专业级示波器界面(附完整代码)

本文详细介绍了如何在C# WinForms应用中,利用ScottPlot.WinForms库快速构建一个专业级的软件示波器界面。通过从环境配置、静态波形绘制到动态数据实时更新的完整实战演示,帮助开发者高效实现高性能的波形显示功能,适用于工业监控、信号分析等多种场景。

weixin_29198045的博客 831

session

session 在我们项目里面,有的时候登录需要用到一个点,就是完成登录后登录注册都隐藏,改为登录用户名,如下图: 这里我们看出,登录后,注册和登录都是隐藏的;换成了欢迎您+登录用户名 也是获取一个登录状态,在这里的项目里,我们的登录名非常关键,用来获取是否登录的状态, 在我们没有登录的时候,就没办法获取到数据,从而没办法进行下一步操作; 这里用到了一个session,用来存储临时登录信息; 把登录后的账号通过账号查出全部数据,在放到session中,方便我们在页面获取; .

weixin_44540452的博客 129

DFT实战:如何用Synopsys工具搞定多时钟域Scan Chain设计(附避坑指南)

本文详细解析了使用Synopsys DFT Compiler工具链实现多时钟域Scan Chain设计的全流程,包括时钟混合策略、跨时钟域平衡技巧和实战脚本剖析。通过量产验证的工程实践方案,帮助DFT工程师有效解决复杂SoC设计中的Scan Chain挑战,提升测试效率和质量。

mm9012的博客 1035

IDC 数据中心工程师面试题汇总

(适用于:IDC运维、机房值班、机房工程师、机柜运维、IDC基础设施、IDC网络运维岗)

老韩的Linux云计算架构师进阶之路 1085

Session、Cookie、Token:登录状态管理的三种“神器”

在开发中,用户登录后如何确认“这个人是我”?系统又如何在安全的前提下维持用户状态?我们带着这些疑问,聊聊三种常见的登录状态管理方式:Session、Cookie 和 Token。并且我会用生动的例子和比喻描述这些概念。

Yan.love的博客 1127

单片机通过蜂鸣器播放任意音乐代码实现(2):音乐单片机代码自动生成

单片机通过蜂鸣器播放任意音乐代码实现(2):音乐单片机代码自动生成 上一节我们已经构建了基于51单片机的蜂鸣器音乐播放环境,接下来只需要手动或者自动添加音乐代码便能实现不同音乐的播放。当然,第二节将告诉你如何自动生成这些音乐代码。 所用软件 MuseScore 3;用于转换MID文件为musicxml文件 C/C++ IDE(本文为Visual Studio 2019) 1.生成音乐对应的MID文件 可以直接下载mid格式音乐文件,也可以将某段音乐转换为MID文件。最好是直接使用mid格式音乐文件,可

kevin1499的博客 2万+

Android app通过session cookie 记录登录状态 (OkHttp3.0 Client设置cookie拦截器 )

摘要:前言在实际开发中,我们经常会遇到这样的场景:app中打开某个H5页面时,H5经常需要知道你的sessioncookie来判断登录状态或者要求你告知sessioncookie。本文将给出个在实际开发中遇到的解决方案。喜欢探讨Android开发技术的同学可以加学习小组QQ群:193765960。版权归作者所有,如有转发,请注明文章出处:http://www.jianshu...

u011652925的博客 2295

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Cookie/Session机制详解

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1  Cookie机制 在程序中,会话

瞧字不识 46万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

302跳转cookie没中上_session和cookie到底有什么区别?

我们在浏览网站的过程中,经常会遇到需要登录的情况,而有些网页只有登录之后才可以访问,而且登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录。还有一些网站,在打开浏览器时就自动登录了,而且很长时间都不会失效,这种情况又是为什么?其实这里面涉及 Session 和 Cookies 的相关知识,那么什么是Session 和 Cookies?它们存在的意义又是什么?背景介绍星巴克...

weixin_35318685的博客 380

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Django实战007:Cookie搭配Session使用

Cookie的作用 前面我们说道Django实战006:Cookie设置及跨域问题处理,Cookie可以在浏览器端保存用户数据,当用户访问服务器时会提交Cookie给服务器,Cookie附加了当前状态, 服务器可以通过Cookie来标识用户的登录状态,起到简单的用户身份识别和用户信息记录等作用。 Cookie登录的实现过程 1.用户通过form表单提交自己的用户名和密码,这通常是一个PO...

kevinfan的博客 710

Cookie 和 Session、实现用户登录逻辑

Cookie 和 Session、实现用户登录逻辑

yyhgo_的博客 4311

Flask的cookie和session

Cookie用来记录用户名 # 获取cookie request.cookies.get(key) # 删除cookie response.delete_cookie(key) # 设置cookie response.set_cookie(key, value) 创建session 首先要在app.config[“SECRET_KEY”] = “随便字符串” Sess...

xiao-啸 192

cookie/session总结

什么是会话?用户打开浏览器,访问一个网站进行一系列操作,关闭浏览器离开,完整过程 就是会话     Cookie : 一种将用户信息保存在客户端技术 ,客户端会将cookie信息自动发送给服务器     Session :一种将用户信息保存在服务器端技术 ,客户端会持有Session信息对应key,通过key找到session信息 (Session基于Cookie实现的)     * Se

tonygone的专栏 1045

Cookie与Session

Session是另⼀种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,⽽Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。如果说Cookie机制是通过检查客户身上的“通⾏证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。

2401_85816249的博客 1049

jsp 内置对象 登录 cookie + session

概述 一共两个页面当直接访问产品列表的时候,会判断用户是否登录,如果用户没有登录,则直接3秒跳转.如果用户登录,则不进行跳转登录页面:对于登录页面来说,直接输入用户名,密码.和数据库进行对比,进行登录.并进行密码的本地保存 ps 一般是需要对密码加密进行本地保存的 代码如下 配置文件 <!DOCTYPE web-app PUBLIC "-//Su...

weixin_33947521的博客 111

cookie与session学习(二)

Cookie与Session的小练习 app1(练习一:用cookie获取请求参数name,若存在请求信息则打印欢迎信息,否则重定向到login.jsp) index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> ...

weixin_30908103的博客 102
上一篇: 【跨域】vue设置代理实现跨域、nginx设置代理实现跨域
下一篇: 【Elastic Search学习总结】2. CentOS7下安装ES
Rita楠神
博客等级 码龄9年 27粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值