文档章节

对session的一些理解

whaon
 whaon
发布于 2013/03/11 17:06
字数 614
阅读 2.1K
收藏 18

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

由于HTTP协议的无状态性,我们可以用过cookie和session来标识某个用户,session实际上也是利用cookie来实现的,一般在请求头中看到的JSESSION=一串字符就是,如果客户端禁用了cookie,我们可以用通过url重写的方式来替代cookie

我们再来看一下request.getSession方法的解释

HttpSession getSession(boolean create)
Returns the current HttpSession associated with this request or, if there is no current session and create is true, returns a new session. 
If create is false and the request has no valid HttpSession, this method returns null.
就是说你不可能在一个方法里创建一个新的session来把前面已存在的session覆盖掉,否则session岂不是乱了

一般某个用户登录后,我们会把他的信息存在session里,如:

session.setAttribute("user", true);

而session是由web容器,如tomcat来维护的,容器会为session生成一个唯一ID,该ID可以通过session.getId()方法获得,然后,服务器会把该ID返回给浏览器,类似

Set-Cookie:JSESSIONID=C7328DFC03B54841EA5A11127791CEF5; Path=/SpringSecurityStudy/; HttpOnly
这样,用户访问其他页面时会带上信息,如:
Cookie:JSESSIONID=C7328DFC03B54841EA5A11127791CEF5
这时在服务端,我们就可以通过session.getAttribute("user") == true来判断用户是否登录,而实际上web容器会根据你的JSESSIONID找到对应的session,然后再取得该session的"user"值

session在服务端是有生命周期的,tomcat的话默认是30分钟,当然我们可以进行配置,或者在程序中设置,session在浏览器端是通过内存形式的cookie来存储的,也就是说如果浏览器关闭,该cookie也就消失了,但是在服务端的session不会立即消失,只到超时才会消失

我们可以通过发送请求来通知服务端来使session失效,这便是注销

在SpringSecurity中,我们一般通过

SecurityContextHolder.getContext().getAuthentication().getPrincipal()

来获取当前登录用户

实际上是,用户登录后,会执行以下操作

session.setAttribute("SPRING_SECURITY_CONTEXT", SecurityContext);

SecurityContextHolder.getContext() == session.getAttribute("SPRING_SECURITY_CONTEXT")
所以我们也可以通过
((SecurityContext) session.getAttribute("SPRING_SECURITY_CONTEXT")).getAuthentication().getPrincipal();
来取得用户

所以综上,SpringSecurity也是通过session来判断用户是否登录

值得一提的是,当我们访问JSP页面时,发现始终会有JSESSIONID,通过查看JSP页面生成的servlet会使用

session = pageContext.getSession();

所以一定会有session,这也说明了为什么在JSP页面中可以使用内置对象session


© 著作权归作者所有

whaon

whaon

粉丝 49
博文 44
码字总数 38920
作品 0
厦门
程序员
私信 提问
加载中

评论(0)

php关于对cookie与session的理解

对于cookie的理解: cookie是服务器留给客户端的礼物(小甜点),来完成服务器对用户的身份验证的一种方式 具体的来讲就是,当用户登录服务器的时候有服务器通过setCookie函数在客户端的浏览...

虫虫
2012/03/05
455
0
spark 大型项目实战(一):用户访问session分析(1) --模块介绍

模块的目标:对用户访问的session 进行分析 1、可以根据使用者指定的某些条件,筛选出指定的一些用户(有特定年龄、职业、城市); 2、对这些用户在指定日期范围内发起的session,进行聚合统...

u012957549
2018/05/12
0
0
Pythonweb框架中的setcookie究竟做了什么?session与cookie关系

用python web框架的同学都知道 ,在使用例如 django,flask,tornado等这些web框架的时候,都有已经为大家封装好了的 setcookie的方法。那么这个方法究竟做了什么。可能有些新人朋友并不能很...

千锋Python讲堂
2019/11/06
0
0
spring-session 存放在redis 失效问题

项目采用spring-session将session保存到redis中。 我有设置session的失效时间 项目启动后访问到登录界面,程序中会存一个session; 我在redis中看到的TTL是1200秒多(spring session的机制默...

天巧星-浪子燕青
2018/06/13
0
0
ASP.NET页面传值

这个问题是上周去远洋公司面试的一道笔试题,面试的时候面试官也问到了,虽然事先有所准备当时也回答上了,但是从根本上说自己还不太理解。正好这两天做高效平台评教系统的时候用到了页面传值...

邵鸿鑫
2014/12/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二、netcore跨平台之 Linux部署nginx代理webapi

原文: 二、netcore跨平台之 Linux部署nginx代理webapi 上一章,我们讲了在linux上安装netcore环境,以及让netcore在linux上运行。 这一章我们开始讲在linux上配置nginx,以及让nginx反向代理...

osc_jo2m8l1r
22分钟前
10
0
CAD怎么转PDF文件?使用这款编辑器一键转换、批量转换

CAD怎么转换成PDF文件呢?小伙伴们不妨使用这款CAD编辑器,把CAD文件一键、批量转换成PDF文件哦。 有许多小伙伴应该都知道,为了满足各种学习、工作的需求,文件之间是经常需要相互转换格式的...

真不莲
22分钟前
19
0
详解Microsoft.AspNetCore.CookiePolicy

原文: 详解Microsoft.AspNetCore.CookiePolicy 详解Asp.Net Core中的Cookie策略 目录 详解Asp.Net Core中的Cookie策略 功能介绍 使用Cookie策略 从UseCookiePolicy方法入手 实现IResponseCo...

osc_0vd38ylb
24分钟前
16
0
怎么找到自己收藏过的思维导图模板?迅捷画图教你详细步骤!

怎么找到自己收藏过的思维导图模板?大家在刷视频的时候,遇到自己喜欢的视频,都会点个微信或者关注,用电脑看网页的时候,遇到有意思的网站,也会点击添加书签进行收藏,方便以后阅读或者是...

赛利亚大姐大
25分钟前
6
0
Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (一)

原文: Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (一) Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (一) 目录 Microsoft.AspNetCore.Authentication.Cook......

osc_t5nbj8ds
25分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部