相信大家在写服务端代码的时候都遇到过登陆权限校验的问题:没登陆的时候没法操作某些命令。
通用的解决方案就是通过session来控制。可大多数人对session一知半解,对于session在客服端与服务器端交互过程中的变化更是不明所以。下面就通过实例(chrome浏览器、tomcat服务器)来解析:客服端和服务器交互过程中session的变化,以及登陆权限校验。
第一部分:客服端和服务器交互过程中session的变化(注意 Request Headers 和 Response Headers)
1.浏览器客服端第一次请求tomcat服务器端,没有带sessionid。请求到了服务器,服务器返回一个sessionid给浏览器客服端
Remote Address:127.0.0.1:9922
Request URL:http://127.0.0.1:9922/saasapi/saasapi
Request Method:POST
Status Code:200 OK
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Content-Length:90
Content-Type:text/plain;charset=UTF-8
Host:127.0.0.1:9922
Origin:chrome-extension://fhjcajmcbmldlhcimfajhfbgofnpcjmb
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
Response Headers
view source
Content-Type:application/json;charset=UTF-8
Date:Wed, 06 May 2015 02:53:24 GMT
Server:Apache-Coyote/1.1
Set-Cookie:JSESSIONID=72FAE585F7AE0642206BE0500317E4F4; Path=/saasapi/; HttpOnly
Transfer-Encoding:chunked
2.浏览器再次请求服务器端,请求的时候带上之前服务器返回的sessionid,服务器端不再返回sessionid
Remote Address:127.0.0.1:9922
Request URL:http://127.0.0.1:9922/saasapi/saasapi
Request Method:POST
Status Code:200 OK
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Content-Length:90
Content-Type:text/plain;charset=UTF-8
Cookie:JSESSIONID=72FAE585F7AE0642206BE0500317E4F4
Host:127.0.0.1:9922
Origin:chrome-extension://fhjcajmcbmldlhcimfajhfbgofnpcjmb
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
Response Headers
view source
Content-Type:application/json;charset=UTF-8
Date:Wed, 06 May 2015 02:56:21 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
好,通过上面的2个步骤,就应该清楚的知道session在客服端与服务器端的变化了。既然知道session的变化了,就可以通过它,就想校验了。可校验的过程是怎样的呢?
第二部分:通过session进行登录权限校验
1.第一次请求,没有带sessionid。HttpServletRequest没有session数据。
(1)如果是登陆操作(不做用户id等信息校验):此时服务器自己生成了session,服务器自动把session的sessionid返回给了客服端。进行登录操作,并需要手动把用户id等信息写入session中。
(2)如果是非登陆操作(做用户id等信息校验):因为没有sessionid传过来,直接返回错误。此时服务器端仍然自己生成了session,并自动把sessionid返回给了客服端。
2.第二次请求,带上了sessionid。通过sessionid读取session中的用户id等信息。
(1)如果是登陆操作(不做用户id等信息校验):进行登录操作,并把用户id等信息写入session中。
(2)如果是非登陆操作(做用户id等信息校验):
如果此sessionid中能读到用户id等信息,说明已经登录过,通过验证,进行业务操作。
如果没有得到用户id相关信息,说明即使带上了sessionid,可没有进行过登录,属于非法操作,返回错误。
ok,讲解完毕。
这篇文章发了4次才发出来,期间账号被锁定3次。原因就是标题中包含服务器等等词汇,被列为了敏感词,然后账号就被锁了,被封之前也没任何提示!有敏感词点发布的时候你提醒呀,你别等发布之后锁账号删文章呀!
相关推荐
tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-...
总结起来,Tomcat-Redis-Session-Manager通过整合Redis和Tomcat,实现了高效、可靠的session管理,特别适用于需要处理高并发和分布式部署的Web应用。其提供的jar包简化了集成过程,让开发者能快速地在Tomcat7和...
"tomcat-redis-session-manager-1.2-tomcat-6.jar" 和 "tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar" 是针对Tomcat 6和Tomcat 7的Redis Session Manager实现,这两个jar文件提供了将Tomcat的session存储...
综上所述,"tomcat-redis-session-manager包集合"为使用Tomcat8和JDK1.8的开发者提供了便捷的手段,通过集成Redis来增强session管理,提升应用在分布式环境下的性能和可靠性。正确配置和使用这个工具可以显著改善...
总之,通过Tomcat和Redis结合实现Session共享,不仅解决了分布式环境下的会话管理问题,还利用了Redis的高效特性,提升了系统的整体性能。这个方案对于大型、高并发的Web应用来说,是一种有效的优化策略。
标题 "Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包" 涉及的是在使用Nginx做负载均衡时,如何通过集成Redis来实现Tomcat7服务器之间的Session共享,从而确保用户在不同服务器之间切换时仍然能够保持...
在用户与Web应用交互的过程中,服务器通过Session ID来标识和区分不同的用户。通常,当用户登录后,服务器会为该用户创建一个Session,并将Session ID返回给浏览器,浏览器将其存储在Cookie中。后续请求,浏览器会...
tomcat修改sessionId,同一台服务器部署多个tomcat需要修改sessionId,否则会出现session冲突的问题
标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上,同时实现用户会话(Session)在这些服务器之间的...
这些JAR包将集成到Tomcat的运行环境中,使Tomcat能够与Memcached通信并处理session的存储和检索。 以下是这些JAR包的作用: 1. `spymemcached-2.8.4.jar`:这是一个基于Java的Memcached客户端库,用于连接和操作...
这个组件实现了将Tomcat应用服务器中的用户session数据存储到Redis分布式缓存系统中,以提高系统的可伸缩性和性能。Redis是一个高性能的键值数据库,常被用来作为缓存服务,因其速度快、数据持久化等特点,非常适合...
用于配置 tomcat-redis-session-manager
【标题】:“Tomcat Redis Session”指的是在Tomcat集群环境中,通过Redis来实现Session的共享与同步,以解决集群中的Session一致性问题。 【描述】:“Tomcat集群Nginx使用Redis保证Session同步”这一场景中,通常...
标题 "ngnix tomcat7 redis session manager ...通过这种方式,你可以实现跨多个Tomcat实例的session共享,提高服务的可扩展性和容错性。在实际操作中,你需要理解每个组件的作用,并正确配置它们以适应你的特定环境。
3. "tomcat-cluster-redis-session-manager-3.0.jar":这是Tomcat Redis Session Manager的核心组件,实现了Tomcat的Session监听器和Manager接口,使得Tomcat能够将Session数据存储到Redis中,并在需要时从Redis中...
值得注意的是,使用`tomcat-redis-session-manager`可能会带来额外的网络延迟,因为每次session操作都需要与Redis通信。因此,在大型分布式系统中,推荐将Redis部署在靠近应用服务器的网络位置,以减少延迟影响。 ...
Tomcat-Redis-Session-Manager是基于Apache Tomcat的Session管理器,通过集成Redis作为Session持久化存储,实现了跨服务器的Session共享。它将Tomcat中的Session数据序列化后存储到Redis中,当需要时再从Redis中读取...
本资源"tomcat7+redis单点 session共享jar"提供了针对Tomcat7服务器和Redis数据存储的一个解决方案,以实现跨服务器的session共享。 **Tomcat7** 是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用...
集成Tomcat集群和Redis Session Manager的过程大致如下: 1. 安装和配置Redis服务器:首先,你需要设置一个运行的Redis实例,它可以是本地的或者远程的。 2. 集成Tomcat集群:修改Tomcat的server.xml文件,配置...