通过session校验登陆权限,浏览器和tomcat通信过程分析

 

相信大家在写服务端代码的时候都遇到过登陆权限校验的问题:没登陆的时候没法操作某些命令。

 

通用的解决方案就是通过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.第一次请求,没有带sessionidHttpServletRequest没有session数据。

 

1)如果是登陆操作(不做用户id等信息校验):此时服务器自己生成了session,服务器自动把sessionsessionid返回给了客服端。进行登录操作,并需要手动把用户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次。原因就是标题中包含服务器等等词汇,被列为了敏感词,然后账号就被锁了,被封之前也没任何提示!有敏感词点发布的时候你提醒呀,你别等发布之后锁账号删文章呀!

 

 

你可能感兴趣的:(session)