一、Session的概念

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

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

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

一般浏览器提供了两种方式来保存,还有一种是程序员使用html隐藏域的方式自定义实现:

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

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

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

三:Session与Cookie区别和联系:

Cookies是属于Session对象的一种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者一个cookie的文本文件中;而“Session”则会占用服务器资源。所以,尽量不要使用Session,而使用Cookies。但是我们一般认为cookie是不可靠的,session是可靠地,但是目前很多著名的站点也都以来cookie。有时候为了解决禁用cookie后的页面处理,通常采用url重写技术,调用session中大量有用的方法从session中获取数据后置入页面。

Cookies与Session的应用场景:
Cookies的安全性能一直是倍受争议的。虽然Cookies是保存在本机上的,但是其信息的完全可见性且易于本地编辑性,往往可以引起很多的安全问题。所以Cookies到底该不该用,到底该怎样用,就有了一个需要给定的底线。

最新文章

  1. Atitti 文本分类  以及 垃圾邮件 判断原理 以及贝叶斯算法的应用解决方案
  2. python语言的优点和缺点
  3. 初识ASP.NET CORE:二、优劣
  4. linux下nagios的安装与部署
  5. 【原创】Android开发之ADB及ADB SHELl命令的应用
  6. gitlab hooks
  7. Hibernate 的*.hbm.xml文件的填写技巧
  8. v$session_wait p1 p1raw p1_16
  9. [jQuery] 自做 jQuery Plugin - Part 1
  10. 传统编程和IoC的对比
  11. Namenode启动报错Operation category JOURNAL is not supported in state standby
  12. Java编程的逻辑 (89) - 正则表达式 (中)
  13. nodejs笔记之文件操作
  14. 爬虫解析库——BeautifulSoup
  15. SVN Attempted to lock an already-locked dir异常解决方法
  16. python 文件保存 出错
  17. 解决:python 连接Oracle 11g 报错:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
  18. 迁移到 Linux:使用 sudo | Linux 中国
  19. 区别script中的type=”text/javascript”和language=”Javascript”
  20. 神奇的datetime和datetime,一毫秒引发的血案

热门文章

  1. PHPStorm运行PHP代码
  2. php 数组助手类
  3. springboot项目抓数据后优化配置及四个补充
  4. css3 伪类以及伪元素的特效
  5. AndroidStudio Gradle手动下载和安装
  6. lvs工作方式和调度算法
  7. Linux部署Redis及PHP-redis扩展
  8. apache 部署
  9. 关于myBatis配置中的一些注意事项
  10. 被弃用的php函数以及用来替代的函数