Web开发中的Session详解及原理分析_web开发中session是什么时候生成的,他与浏览器之间是怎样实现会话保持的(1)

而后面的value值对应的则是给该客户端新创建的session的ID;
当用户再一次访问Servlet时,请求C都会携带着Cookie中的SessionID去访问;
服务器会根据这个Session ID去查看是否有对应的Session对象;
如果有就拿出来使用;如果没有就创建一个Session(相当于用户第一次访问)。


#### **3.** **HttpSession生命周期:**


#### **3.1 什么时候创建HttpSession**


* (1). 对于JSP而言:  
   是否浏览器访问服务端的任何一个JSP,服务器都会立即创建一个HttpSession对象呢? 不一定。  
   ①.若当前的JSP或Servlet,是客户端访问当前WEB应用的第一个资源,且JSP的page指令中的session属性为false时,服务器是不会为JSP创建HttpSession对象的;  
   ②.若当前JSP不是客户端访问的WEB应用的第一个资源,且其他页面已经创建了一个HttpSession对象,则服务器也不会为当前JSP创建一个新的HttpSession对象,而是会把和当前会话关联的那个HttpSession对象返回给当前的JSP页面。
* (2). 对于Servlet而言:  
   若Servlet是客户端访问的第一个WEB应用资源,只有调用了request.getSession()或request.getSession(true) 才会创建HttpSession对象。


#### **3.2 什么时候销毁HttpSession对象:**


* (1). 直接调用HttpSession的invalidate()方法,会使HttpSession失效;
* (2). 服务器卸载了当前Web应用;
* (3). 超出了HttpSession的过期时间。



#代码中设置session过期时间的方式
session.setMaxInactiveInterval(5);
#web.xml中设置session过期时间的方式

30


* **注:**  
 由于会有越来越多的用户访问服务器,因此Session也会越来越多。为了防止内存溢出,服务器会把长时间内没有活跃的Session从内存中删除,而这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。


#### **4. Session的特点**



Session数据保存在服务器端;
Session中可以保存任意类型的数据;
Session默认的生命周期是30分钟,可以手动设置更长或更短的时间。


### **二. Cookie机制**


#### **1. 什么是Cookie**



> 
> *Cookie翻译成中文是甜饼的意思,其实就是一个小型的文本文件,用来保存一些简单的信息(浏览器对Cookie的内存大小是有限制的)。Cookie由服务器端生成,并且会发送给 User-Agent (一般是浏览器),服务器一般会告诉浏览器设置一下Cookie,然后浏览器会自动将该 Cookie 以*
> *`key/value`*  
>  *的格式保存到浏览器的某个目录下;等到下次请求同一网站时,浏览器会自动通过请求头发送该`Cookie`给服务器,前提是浏览器设置了启用`Cookie`功能。*
> 


#### **2. 为什么要有Cookie**



> 
> *Web应用程序是使用`HTTP`协议来传输数据的,而`HTTP`协议是无状态的协议,也就是说一旦数据交换完毕,客户端与服务器端的连接就会关闭,等再次交换数据就需要建立新的连接,这就意味着服务器无法从连接上跟踪会话。比如我们登陆一个网站的时候,会提醒你要不要记住账户和密码,这样下次来你就不用再次输入账号密码了,这就是`Cookie`的作用。当我们再次访问的时候,服务器会直接根据我们的`Cookie`来获取上一次取过的东西。*
> 


#### **3. Cookie 的特点**


#### **3.1 Cookie 的过期时间**



> 
> *我们每次发送请求的时候,都会根据`domain`来设置相应的Cookie。Cookie有永久的,也有临时的,每个浏览器都有自己的Cookie,我们可以通过设置`expires、max-age`来设置保存日期,如果不设置的话默认是临时存储,也就是说关闭浏览器后Cookie就会消失。*
> 



document.cookie = ‘expires=时间/max-age=秒’


#### **3.2 Cookie要满足同源策略**



> 
> *虽然网站`news.baidu.com`与`www.baidu.com`同属于Baidu,但是域名却不一样,也就是说这两者之间是不能互相操作彼此`Cookie`的。只有域名和`path`都必须一样,才能相互访问彼此的Cooki`。但是需要注意不同浏览器对`path`访问规定是不一样的,对于chrome,`path`必须为当前目录,设置为其他目录无效,当前页面只能访问当前目录的`Cookie`。*
> 


#### **3.3 Cookie内存大小受限制**


Cookie有个数和大小的限制,大小一般是4k,但是不同的浏览器,具体的Cookie大小也是不同的。


* Firefox和Safari允许Cookie多达4097个字节,包括名(name)、值(value)和等号;
* Opera允许Cookie多达4096个字节,包括名(name)、值(value)和等号;
* Internet Explorer允许Cookie多达4095个字节,包括名(name)、值(value)和等号。


![](https://img-blog.csdnimg.cn/img_convert/bab5e028eeb5f93a81a54c753820c839.png)


#### **3.4 Cookie的安全性**


`Cookie`是保存在浏览器本地的,是可以被修改的,所以敏感的数据不要放在Cookie里。


### **三. Session共享**


#### **1. Session存在的问题**


HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。但是如果我们将Web应用横向扩展成分布式的集群,然后利用LVS或Nginx进行负载均衡,那么对来自同一用户的Http请求,将有可能被负载分发到两个不同的服务器实例中去。那么如何保证不同实例间的Session共享,就成为一个不得不解决的问题。


最简单的解决方法就是把Session数据保存到内存以外的一个统一的地方,例如Memcached/Redis中。那么问题又来了,如何替换掉Servlet容器,来创建和管理HttpSession呢?


#### **2. Session共享的实现方案**


1. 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略。不过这种方式有个缺点,就是需要耦合Tomcat/Jetty等Servlet容器的代码。这方面其实早就有开源项目了,例如[memcached-session-manager]( ),以及[tomcat-redis-session-manager]( ),不过这暂时都只支持Tomcat6/Tomcat7。
2. 配置Nginx的负载均衡算法为ip\_hash,这样每个请求按访问IP的hash结果分配,这样来自同一个IP的访客就会固定访问一个后端服务器,有效解决了动态网页存在的Session共享问题。
3. 使用Shiro管理Session,可以用Redis来实现Shiro 的SessionDao接口,这样Session便归Redis来保存了。
4. 设计一个Filter,利用HttpServletRequestWrapper,实现自己的 getSession()方法,来接管创建和管理Session数据的工作。Spring-Session就是通过这样的思路实现的。
5. Spring-Session结合Redis实现Session共享。


### **四. Spring Session**


#### **1. 传统Session的问题**



还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!


王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。


对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!


【完整版领取方式在文末!!】


***93道网络安全面试题***


![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)








![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)





![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)





内容实在太多,不一一截图了


### 黑客学习资源推荐


最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


😝朋友们如果有需要的话,可以联系领取~

#### 1️⃣零基础入门


##### ① 学习路线


对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。


![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)


##### ② 路线对应学习视频


同时每个成长路线对应的板块都有配套的视频提供:


![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)


#### 2️⃣视频配套工具&国内外网安书籍、文档


##### ① 工具


![](https://img-blog.csdnimg.cn/img_convert/d3f08d9a26927e48b1332a38401b3369.png#pic_center)


##### ② 视频


![image1](https://img-blog.csdnimg.cn/img_convert/f18acc028dc224b7ace77f2e260ba222.png#pic_center)


##### ③ 书籍


![image2](https://img-blog.csdnimg.cn/img_convert/769b7e13b39771b3a6e4397753dab12e.png#pic_center)

资源较为敏感,未展示全面,需要的最下面获取

![在这里插入图片描述](https://img-blog.csdnimg.cn/e4f9ac066e8c485f8407a99619f9c5b5.png#pic_center)![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png#pic_center)


##### ② 简历模板


![在这里插入图片描述](https://img-blog.csdnimg.cn/504b8be96bfa4dfb8befc2af49aabfa2.png#pic_center)

 **因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆**

  

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值