html 页面session会话域怎么拿_Cookie和Session异同

摘要:对于浏览器中的数据存储,往往存在Session和Cookie两种方式,在许多科技公司的面试过程中常常也会被提及这两种方式在数据存储中有什么异同,因此,本篇文章是我对于Session和Cookie两种方式的见解

关键字:Session、Cookie、数据存储

一、首先我们应该先了解一下二者存储的位置有什么不同

对于Session它是将Session中的数据信息存放在了服务器端。原理即为当客户端访问服务器端的某个页面的过程中,通过请求会在服务器端占用服务器端的一部分内存,被占用的部分便是Session,它是将浏览器关联在一起的,Session在运行当中是只允许当前浏览器访问的,在并发过程中也会阻止后续浏览器访问该页面,如果也需要访问,并发过程中的浏览器也会重新建立自身的Session。

而对于Cookie 它是将数据信息存放在了客户端的浏览器上,并不会占用服务器内存。它是形成在客户端浏览器当中的一个简单文本文件,这个文件建立是要与当前访问的Web页面进行关联,所以在并发访问中Cookie是支持的。当客户机访问该Web页面之后,当再次访问时,客户端会根据上次访问的信息访问在本浏览器中生成的文本文档,可以用于客户的信息记录。

二、其次,Session和Cookie在储存容量和储存方式上也有不同

Session由于是对服务器端进行数据存储,由服务器端分配内存,所以它的存储容量没有上限,由于没有上限,因此对于服务器的性能由较高要求,并且随着客户的不断增加,Session也应该具有自动删除功能,才能保持服务器的正常运作。Session中的数据类型支持存储的任何类型,例如String、int、list、map等。所以 Session适用于存储大量数据。

一个站点的存储Cookie的数量是不能超过20个。在存储方式上,Cookie只能保存ASCII字符串,存储过程中还需要进行编译,转换为Unicode字符或者二进制数据。

所以在存储时间上,Session的存储时间将会更长久一些。举一个简单的例子,Session就像是顾客在商店里办理会员卡一样,如果我们不是主动申请删除会员卡的信息,那么客户的信息将会永久的保存在该商店的电脑中。对于Session也是如此,如果我们的服务器管理人员不去主动删除在服务器上的信息,那么Session信息也会将永久的在服务器上保存。程序员一般在发送http请求时会在用户做log off时发送删除指令去删除Session,但是服务器却不会注意客户端是否关闭了浏览器,造成这种原因是因为大部分的Session机制都是采用Cookie来保存Session的id,关闭浏览器的同时这个id也就随之消失,如果服务器设置的Cookie保存在硬盘上,或者使用某种手段改写浏览器发出的http请求头,这样当再次打开浏览器,便能找回原来的Session。

三、在两者的安全问题上,也是有差别的

Session Cookie都是针对某一次会话,当我们的浏览器的会话结束时,Session Cookie也会随之消失。但是,由于persistent Cookie是存在于客户端的硬盘上的一个文本文件,我们一般是不能访问的,但是有时会遭受网络的攻击,通过网络钓鱼脚本攻击等致使个人信息被篡改,因此在这方面persistent Cookie自然就没有Session Cookie安全了,原因是Session Cookie是存储于服务器端,它不支持多窗口的使用,不支持并发的操作,因此,用户的信息就会得到很好的保护。

Session有两种实现方式,一种是通过Cookie实现,一种是通过URL重写来实现

通过Cookie实现既是将Session的id放在Cookie中存放在客户端,这就确保了下一次打开浏览器时通过Cookie保存的id地址发送给服务器端同时查询上次的访问记录。当浏览器设置Cookie时,Session将会依赖Cookie。

当不支持Cookie时,我们就要通过重写URL的方式来实现,通常我们使用response.encodeURL()方法来实现。encodeURL()具有两个作用,其一是起到转码的作用,当进行中文编码或者一些其他特殊方式编码时,便会起到作用。其二,当URL后面加入Sessionid时但又不支持Cookie时,其便起到了作用,在其后加上要访问的Session的地址,这样便可以在Session被禁止的时候也可以使用Session了,这就考验开发者对于Session的掌握熟练程度。

四、举个简单的例子

Out.println(“<br><a href=”+”SessionInfoServlet”+”>refresh</a>”);

Out.println(“</BODY></HTML>”);

使用encodeURL()方法后:

Out.println(“<br><a href=”+response.encodeURL.(“SessionInfoServlet”)+”>refresh</a>”);

Out.println(“<BODY></HTML>”);

4f5ca00b7ca65e4b76b448db26b5fa74.png

bf4fa845721a6edb6e1e8f895b205324.png

五、二者在对浏览器的要求也有不同

Session虽然是占用服务器的内存 数据保存在服务器端,对于客户端是透明的,但是它的运行依旧需要客户端的支持。它需要使用Cookie作为标识符来判断客户是否在该浏览器中有过记录。由于随着科技的进步,曾经大多手机上的浏览器不支持Cookie,但是现在许多的浏览器也开始支持Cookie Session。

Cookie的限制要求由于它的特性,多数浏览器都支持,但是考虑到信息的安全性,所以在某些方面受到了限制。

以上便是我对于Cookie和Session异同的阐述。

作者:小丑先森

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值