深入浅出seesion和cookie
session在计算机中,尤其是在网络应用中,称为“会话控制”。session 对象存储特定用户会话所需的属性及配置信息。session跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是cookie与session。Cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份。今天这篇博文,小编主要简单的介绍一下session和cookie,还请各位大神多多指教。
session的基本原理
小伙伴们都知道cookie是存在客户端的,session是存到服务端的,如果存到session整个空间里,只要这个用户没有关闭浏览器,都能从服务器上取得设置的值,如果重新启动浏览器就没有了,seesion是一个会话,一个会话可以看作是一个人,那么她就和这个人进行了绑定,对应这个浏览器,所以人和浏览器就进行了绑定,如下图:
结合上面的图形,小编来详细的介绍一下,假如张三是一个人,且张三是一个客户端,张三要访问我们的服务器(目前我们使用的服务器是tomcat),当张三来访问的时候,我们在tomcat上开辟一个资源或者说开辟一个空间给张三,更准确的说,就是分配一块内存给张三,ok,这个时候,张三就可以进行访问了,张三可以向内存里面存入资源,只要浏览器没有进行关闭的操作,这里面的资源张三可以随时进行存的操作,不管访问了多少页面,只要以前存放在这个浏览器里面的资源,张三都可以拿出来,但是如果进行了关闭浏览器的操作,那么这个里面的东西张三就拿不出来了,再次打开浏览器,用张三进行登录,也是取不出来的,所以这块的内容占着内存。那么如果这个时候李四来了,李四也开辟了一个空间,李四把浏览器关闭了,同样的,李四这块也占用了一定的内存,讲解到这里,小编相信,小伙伴们都能理解了,seesion实在服务端的,在tomcat上,cookie是在客户端的,我们在深入一点研究,http这个协议,小伙伴都有所了解,比如我们平常使用的通讯工具QQ,她可以检测到对方在不在线,比如张三发了一个消息给李四,李四回复了张三的消息,那么问题来了,张三是如何找到李四的呢?张三肯定要知道李四的地址,这样张三和李四才能相互找到对方,而http协议又是怎么回事呢?还是上面的例子来说,假设张三去访问,访问tomcat,tomcat为其开辟了一个空间,之后response进行返回,那下一次访问的时候,张三如何知道他需要找的地方呢?而不是找其他的地方呢?因为这里面有很多的空间,假设有一万个用户,就有一万份内存的分配,怎么样才能知道访问的地方是分配给张三的那块内存呢?是否可以用张三进行标记一下?如果有重复的呢?我们又该怎么办?所以http协议是没有状态的,她不会一直处于连接的状态,如果一直处于连接的状态,张三肯定能找到分配给自己的那块内存,这个request过来,再response过去,就断了,她连接完之后,马上就断,也就是谁都不知道谁的存在了,不像QQ,如果一方下线了,另一方马上知道对方已经不在线了,所以http是无状态的,现在谁都不认识谁了,下次如果再想找这块资源,就找不到,那么我们该怎么办呢?且听小编慢慢道来:
假设张三来进行访问的操作,服务器上为张三分配了一个空间,这个空间属于张三,整个会话都可以用到,所以她叫做session,如果把浏览器关闭,再次启动进行访问的时候,那么就是另外一个会话了,不是这一次的了,当张三来访问的时候,就会创建一个seesionid,所有会有一个标识,这个seesionid是不重复的,创建完编号,做完相关的操作之后,response返回,会把编号也一同带回去,假如这个时候,李四来了,也会为李四创建一个id,访问完成之后,同样会把编号带回去,如下图所示:
所以session有一个超时的概念,如果没有访问,就会被释放。在cookie里面保存了session的id。cookie是可以禁用的,如果浏览器不让我们写cookie了,那怎么办呢,seesion也找不到了,如何解决了,这个时候,我们采用URL重写的方式,什么叫url重写呢?URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成 “UserProfile/1.aspx”,这样的URL,这样的网址可以更好的被网站所阅读。如果浏览器不支持Cookie或用户阻止了所有Cookie,可以把会话ID附加在HTML页面中所有的URL上,这些页面作为响应发送给客户。这样,当用户单击URL时,会话ID被自动作为请求行的一部分而不是作为头行发送回服务器。这种方法称为URL重写(URL rewriting)。
URL重写
URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成 “UserProfile/1.aspx”,这样的URL,这样的网址可以更好的被网站所阅读。
如果浏览器不支持Cookie或用户阻止了所有Cookie,可以把会话ID附加在HTML页面中所有的URL上,这些页面作为响应发送给客户。这样,当用户单击URL时,会话ID被自动作为请求行的一部分而不是作为头行发送回服务器。这种方法称为URL重写(URL rewriting)。
一般来说,URL重写是支持会话的非常健壮的方法。在不能确定浏览器是否支持Cookie的情况下应该使用这种方法。然而,使用URL重写应该注意下面几点:
1.如果使用URL重写,应该在应用程序的所有页面中,对所有的URL编码,包括所有的超链接和表单的action属性值。
2.应用程序的所有的页面都应该是动态的。因为不同的用户具有不同的会话ID,因此在静态HTML页面中无法在URL上附加会话ID。
3.所有静态的HTML页面必须通过Servlet运行,在它将页面发送给客户时会重写URL。
url重写有什么缺点呢?对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL。每个引用你的站点的URL,以及那些返回给用户的URL(即使通过间接手段,比如服务器重定向中的Location字段)都要添加额外的信息。这意味着在你的站点上不能有任何静态的HTML页面(至少静态页面中不能有任何链接到站点动态页面的链接)。因此,每个页面都必须使用servlet或JSP动态生成。即使所有的页面都动态生成,如果用户离开了会话并通过书签或链接再次回来,会话的信息都会丢失,因为存储下来的链接含有错误的标识信息-该URL后面的SESSION ID已经过期了。介绍完了session,小编再来简单的介绍一下cookie。
cookie的基本原理
cookie在英文中的意思指的是就这牛奶一起吃的点心,然而,在因特网内,cookie这个字有了完全不同的意思,那么cookie到底是什么呢,cookie是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息,这是很有用的,让浏览器记住这位访客的特定信息,这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置,花费的时间或用户首选项如样式表,cookie是个存储在浏览器目录的文本文件,当浏览器运行时,存储在ram中,一旦从该网站或网络服务器退出,cookie也可存储在计算机的硬驱上,当访客结束其浏览器对话时,即终止的所有所有cookie。
简单来说,cookie的含义是服务器发送给浏览器的甜点,即服务器在响应请求时可以将一些数据以“键-值”对的形式通过响应信息保存在客户端,当浏览器再次访问相同的应用时,会将原先的cookie通过请求信息带到服务端,如下面的代码,servlet展示了cookie的功能:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String option = request.getParameter("option"); if ("show".equals(option)) { //获得请求信息中的Cookie数据 Cookie[] cookies = request.getCookies(); if (cookies != null) { //找出名称(键)为“cool”的Cookie for (int i = 0; i < cookies.length; i++) { if ("cool".equals(cookies[i].getName())) { out.println("<h2>" + cookies[i].getName() + ":" + cookies[i].getValue() + "</h2>"); } } } } else if ("add".equals(option)) { //创建Cookie对象 Cookie cookie = new Cookie("cool", "yeah!"); //设置生命周期以秒为单位 cookie.setMaxAge(20); //添加Cookie response.addCookie(cookie); }
cookie可以用于保持用户的会话状态,但是cookie信息保存在客户端,存在较大的安全隐患,且一般浏览器对cookie的数目及其数据大小有严格的限制,在web应用中,一般情况下通过httpSession对象保持会话状态,每个cookie都可以设置一个最大生命周期,如果设置了该值,浏览器将会把该cookie写到硬盘上,但如果没有设置cookie的最大生命周期,这样的cookie成为会话cookie,她存在内存中,当浏览器关闭时,该cookie将会消失。
cookie和session的区别
a、cookie数据存放在客户的浏览器上,session数据存放在服务器上。
b、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用seesion。
c、session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能。
d、单个cookie在客户端的限制是3k,就是说一个站点在客户端存放的cookie不能大于3k。
小编寄语:该博文,小编主要简单的介绍了seesion和cookie、url重写以及session和cookie他们之间的区别。小编介绍的都是一些简单的理论知识,对于session和cookie的具体作用,还需要我们在实际项目中多多的体会。java学习,未完待续......
深入浅出seesion和cookie的更多相关文章
- [py]flask操作cookie&django的seesion和cookie机制
浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...
- 简述Seesion和Cookie
1.0 为什么需要session和cookie? 当用户在发送一个请求关得到返回信息之后,客户端与服务器端之间的网络连接就已经断开了,在下一个请求发送时,服务器无法确定这次请求和上次的请求是否来自同一 ...
- ASP.NET 之深入浅出Session和Cookie
在做人事档案管理系统中,对于Session和Cookie的使用后理解更加深刻了,下面对本知识点总结学习. Session是什么? 简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有 ...
- Seesion和Cookie详解2
转载来自: https://www.toutiao.com/a6693986851193094664/?tt_from=weixin&utm_campaign=client_share& ...
- Tomcat深入浅出——Session与Cookie(四)
一.Cookie 1.1 Cookie概念 Cookie:有时也用其复数形式 Cookies.类型为"小型文本文件",是某些网站为了辨别用户身份,进行Session跟踪而储存在用户 ...
- 关于Cookie的有关内容
1.首先谈谈http协议与状态保持. Http协议本身是无状态的,这与http协议本来的目的是相符的,客户端只需要简单的向服务器发出请求操作,然后服务器对请求作出响应.无论客户端还是服务器都没有必要记 ...
- [py][mx]django的cookie和session操作-7天免登录
浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...
- 服务器对cookie信息加密
通过redis的seesion对cookie信息加密 --- 防止cookie记录的用户信息泄露 import tornado.ioloop import tornado.web from data ...
- 《52讲轻松搞定网络爬虫》读书笔记 - Session和Cookie
为什么要用Session和Cookie? 简单一句话,因为Session和Cookie可以记录用户状态信息 嘶..这到底啥意思呢? 背景一:动态网页的出现 什么是静态网页 含义:一个网页的内容是HTM ...
随机推荐
- 紧急疏散evacuate
1689: [HNOI2007]紧急疏散evacuate 题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是".",那么表示这是一块空地 ...
- 51 nod 1610 路径计数(Moblus+dp)
1610 路径计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 路径上所有边权的最大公约数定义为一条路径的值. 给定一个有向无环图.T次修改操作,每次修改一 ...
- 【LSGDOJ 1852】青蛙的烦恼 DP
题目描述 池塘中有n片荷叶恰好围成了一个凸多边形,有一只小青蛙恰好站在1号荷叶上,小青蛙想通过最短的路程遍历所有的荷叶(经过一个荷叶一次且仅一次),小青蛙可以从一片荷叶上跳到另外任意一片荷叶上. 输入 ...
- bzoj 1875: [SDOI2009]HH去散步
Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又 ...
- [usaco6.1.1Postal Vans]
来自FallDream的博客,未经允许,请勿转载,谢谢. 给你一个4*n的棋盘,问从(1,1)出发恰好经过所有格子一次的走法数量.(n<=1000) 插头dp,用f[i][j][k]表示转移到第 ...
- THUPC2017 抱大腿记
Day 0: 移步http://www.cnblogs.com/juruolty/p/6854848.html Day 1: 来到了清华大学. 见到了zrt巨巨. 又发了件衣服,我们开始看别的队的名字 ...
- Linux命令-关机命令详解
关机命令:1.halt 立刻关机 2.poweroff 立刻关机 3.shutdown -h now 立刻关机(root用户使用) 4.shutdown -h 10 10分钟后自动关机 如果是通过sh ...
- python day3_liaoxuefeng
1.Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子: names = ['Michael', 'Bob', 'Tracy'] for na ...
- C语言如何输出%
两个%即可,C语言中%有两个作用: 第一种是作为运算符,取余,例如:9%4=1(9/4=2--1). 第二种是转义符,比如在scanf()和printf()中的输入参数常出现带有%的表示参数类型的变量 ...
- [坑]Spring利用注解@Value获取properties属性为null
今天在项目中想使用@Value来获取Springboot中properties中属性值. 场景:定义了一个工具类,想要获取一些配置参数,使用了@value来获取,但是死活也获取不到. 如何解决:在使用 ...