Session Cookie介绍和使用
Cookie机制
Cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。 IETF RFC 2965 HTTP状态管理机制是一种通用的cookie规范。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同一服务器的任何请求绑定到这些cookie。
具体来说,cookie机制使用一种在客户端维护状态的方案。它是客户端会话状态的存储机制,他需要用户打开客户端的cookie支持。 Cookie的作用是解决HTTP协议中缺少无状态缺陷的问题。
通过扩展HTTP协议来实现正统cookie分发。服务器通过向HTTP响应头添加特殊指示来提示浏览器生成相应的cookie。但是,纯JavaScript等客户端脚本也可以生成cookie。根据某些原则,浏览器在后台自动将cookie的使用发送到服务器。浏览器检查所有存储的cookie。如果cookie声明范围大于或等于要请求的资源的位置,则cookie将附加到请求资源的HTTP请求标头并发送到服务器。
cookie的内容主要包括:名称,值,到期时间,路径和域。路径与域一起构成了cookie的范围。如果未设置到期时间,则表示此cookie的生命周期是在浏览器会话期间,浏览器窗口关闭,并且cookie消失。生命周期为浏览器会话的cookie称为会话cookie。会话cookie通常不存储在硬盘上,而是存储在内存中。当然,这种行为不受监管。如果设置了到期时间,浏览器会将cookie保存到硬盘,关闭它并再次打开浏览器。在超过设定的到期时间之前,这些cookie仍然有效。存储在硬盘上的Cookie可以在不同的浏览器进程之间共享,例如两个IE窗口。不同的浏览器对存储在内存中的cookie有不同的处理方法。会话机制使用维护服务器端状态的解决方案。同时,我们也看到,由于服务器端状态保存方案还需要在客户端保存标识符,会话机制可能需要使用cookie机制来达到保存标识符的目的。会话提供了一种管理全局变量的便捷方法。
该会话适用于每个用户。变量的值存储在服务器上。 sessionID用于区分使用哪个用户会话变量。当用户访问浏览器时,该值将返回给服务器。当客户端禁用cookie时,此值也可以设置为通过get返回给服务器。
在安全性方面:当您访问使用会话并在您自己的计算机上创建cookie的站点时,建议服务器端的会话机制更安全,因为它不会任意读取客户端存储的信息。
Session会话机制
session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息。
当程序需要为客户端的请求创建会话时,服务器首先检查客户端的请求是否包含会话标识符(称为会话ID)。如果包含它,它先前已为此客户端创建了一个会话。服务器根据会话ID检索会话(无法检索,将创建新会话),如果客户端请求不包含会话ID,则为客户端创建会话并生成与会话关联的会话ID。 session id应该是一个既不重复也不容易被复制的字符串。会话ID将返回给客户端以保存此响应。
保存此会话ID的方法可以是cookie,以便浏览器可以根据交互期间的规则自动将此标志用于服务器。通常,此cookie的名称与SEEESIONID类似。但是,cookie可以被人为禁止,因此必须有其他机制在禁用cookie时将会话ID传递回服务器。经常使用的一种技术称为URL重写,它只是将会话ID直接附加到URL路径。还有一种称为形式隐藏字段的技术。也就是说,服务器将自动修改表单并添加隐藏字段,以便在提交表单时将会话ID传递回服务器。
Cookie和Sessions都能够进行会话跟踪,但原则并不相同。一般情况下,两者都可以满足需求,但有时候他们不能使用cookies,有时候不能使用Session。以下是两者和适用场所的特征比较。
1.不同的访问方法
只有ASCII字符串可以存储在cookie中。如果需要访问Unicode字符或二进制数据,则需要先对其进行编码。无法在cookie中直接访问Java对象。要存储稍微复杂的信息,使用cookie会更难。
会话可以访问任何类型的数据,包括但不限于字符串、Integer、List、Map等。 Session也可以直接存储Java Beans甚至任何Java类,对象等,使用起来非常方便。将Session视为Java容器类。
2.不同的隐私政策
Cookie存储在客户端阅读器中,对客户端可见。客户端上的某些程序可能会窥探、副本以更正cookie的内容。会话存储在服务器上,对客户端是透明的。不存在敏感信息泄露的风险。
如果您选择cookie,最好不要写敏感信息,如帐户密码。最好加密像Google、Baidu这样的cookie信息,并将其提交给服务器进行解密,以确保我自己可以读取cookie中的信息。如果选择Session,则可以省去很多麻烦。无论如何,它被放置在服务器上,并且会话中的任何隐私都可以得到有效保护。
3.有效期的差异
使用Google的任何人都知道,如果您已登录Google,Google的登录信息将长期有效。用户每次访问时都不必再次登录,Google会永久记录用户的登录信息。要达到这个效果,使用cookies将是一个不错的选择。只需将cookie的到期时间属性设置为一个非常大的数字。由于Session依赖于名为JSESSIONID的cookie,并且Cookie JSESSIONID的到期时间默认为-1,因此只需关闭阅读器就会使Session无效,Session将无法永久完成信息。无法使用URL地址重写。此外,如果设置Session的超时时间太长,服务器将累积的Sessions越多,导致内存溢出的可能性就越大。
4.不同的服务器压力
会话保留在服务器端,每个用户都将生成一个会话。如果有很多并发用户,它会产生大量的Session并消耗大量内存。因此,具有高并发流量的站点(如Google、Baidu、Sina)不太可能使用Session来跟踪客户会话。
Cookie保留在客户端上,不消耗服务器资源。如果有很多用户同时阅读,那么cookie是一个不错的选择。关于Google、Baidu、Sina,cookies可能是唯一的选择。
5.不同的浏览器支持
客户端浏览器需要支持Cookie。如果客户端禁用cookie或不支持cookie,则会话跟踪将无效。关于WAP上的应用程序,常规cookie无用。
如果客户端浏览器不支持cookie,则需要使用会话和URL地址重写。应该注意的是,Session程序中使用的所有URL都必须重写URL地址,否则会话会话跟踪将无效。对于WAP应用程序,会话+ URL地址重写可能是唯一的选择。
如果客户端支持cookie,则可以在浏览器窗口和子窗口中将cookie设置为有效(将到期时间设置为-1),或者可以将cookie设置为在所有阅读器窗口中有效(设置到期时间)大于1)0的整数。但是,Session只能在此阅读器窗口及其子窗口中使用。如果两个浏览器窗口彼此不相关,则它们将使用两个不同的会话。 (与IE8下不同窗口相关的会话)
6.跨域支持的差异Cookie支持跨域访问。例如,如果domain属性设置为“.biaodianfu.com”,则所有以“.biaodianfu.com”为后缀的域名都可以访问cookie。跨域cookie现在通常在网络上使用,例如Google、Baidu、Sina。会话不支持跨域访问。会话仅在其所在的域名内有效。
仅使用cookie或仅使用Sessions可能无法达到预期的效果。此时,您应该尝试使用Cookie和会话。 Cookie和Sessions的组合将在练习项目中实现许多意想不到的结果。
我的理解:
1.由于HTTP协议是无状态协议,当服务器需要记录用户的状态时,需要一些机制来识别特定用户。这个机制是Session。点击下订单时,购物车等典型场景使用按钮时,由于HTTP协议是无状态的,因此不知道哪个用户在运行。因此,服务器需要为特定用户创建特定会话,该会话用于识别用户并跟踪用户,以便知道购物车。有几本书。此会话存储在服务器上,并具有唯一标识符。有很多方法可以在服务器端保存会话,内存、数据库、文件有它。在群集中,您还应该考虑转移会话。在大型网站上,将有一个特殊的会话服务器群集来保存用户会话。此时,会话信息存储在内存中,并使用一些缓存服务,如Memcached。来吧,把会议。2.考虑服务器如何识别特定客户?此时,cookie已出现在场景中。每次发出HTTP请求时,客户端都会将相应的cookie信息发送到服务器。事实上,大多数应用程序使用cookie来实现会话跟踪。在第一次创建会话时,服务器将告诉HTTP协议中的客户端需要在cookie中记录会话ID。会话ID被发送到服务器,我知道你是谁。有人问,如果客户端的浏览器禁用了cookie,该怎么办?在这种情况下,称为URL重写的技术用于会话跟踪。也就是说,每个HTTP交互,诸如sid = xxxxx之类的URL被附加到URL,并且服务器相应地识别用户。
3. Cookie也可用于某些用户友好的场景。想象一下,您已经登录过一次网站。下次登录时,您不想再次输入帐户。我该怎么办?此信息可以写入cookie。访问网站时,网站页面的脚本可以读取此信息,并自动为您填写用户名,方便用户使用。这也是cookie名称的起源,给用户一点点甜蜜。
所以,总结一下:
Session是保存在服务器上的数据结构,用于跟踪用户的状态。此数据可以保存在群集、数据库、文件中。
Cookie是客户端存储用户信息的机制。它用于记录有关用户的一些信息,是实现会话的一种方式。
1.状态保持
http协议是无状态的:每个请求都是一个新请求,并且不会记住先前通信的状态。
客户端和服务器之间的一次通信是会话实现状态保留的方法:在客户端或服务器端存储与会话相关的数据存储方法包括cookie、session,会话通常是指会话对象。使用cookie,所有数据都存储在客户端上,注意不要存储敏感信息建议使用sesison模式,所有数据都存储在服务器端,session_id存储在客户端cookie中。状态保持的目的是在一段时间内跟踪请求者的状态,并实现对当前请求者的数据的跨页访问。注意:不同请求者之间不会共享此数据,与请求者一一对应
2.Session会话(示例Django)·默认情况下启用使用django-admin startproject创建的项目
·在settings.py文件中
在INSTALLED_APPS列表中添加:
'django.contrib.sessions',
在MIDDLEWARE_CLASSES列表中添加:
'django.contrib.sessions.middleware.SessionMiddleware',
·禁用会话:删除上面指定的两个值,禁用会话将保存一些性能
3.使用session
·启用会话后,每个HttpRequest对象都将具有会话属性,该属性是类字典对象
Get(key,default = None):根据密钥获取会话的值
Request.session.get(“UNAME”,””)
·clear():清除所有会话
Flus():删除当前会话数据并删除会话的cookie
Del request.session ['uname']:删除会话
4.session到期时间
Set_expiry(value):设置会话的超时时间
·如果未指定,则在两周后过期
·如果value是整数,则会话值将在值秒内没有活动后到期
·如果值是timedelta对象,则会话将在当前时间加上指定的日期/时间到期
·如果value为0,则用户会话的cookie将在用户的浏览器关闭时到期
·如果value为None,则会话永不过期
Cookie和Session的区别
1、Cookie是存在客户端,Session存在服务器
2、安全性要求高的用Session,要求低用Cookie
3、Cookie只能存储字符串,Session可以存储任何信息
4、Cookie如果不设置时间,当关闭浏览器时,Cookie就失效,不会在本地保存;Session的生命周期是一个会话(当启动浏览器到关闭浏览器)
5、在存储相对持久的信息时,应考虑使用 Cookie,因为 Cookie 可以以文件的形式,存储在客户端。在进行一些登录的验证及信息拦截的时候,可以使用 Session。
引用:
https://blog.csdn.net/weixin_42808295/article/details/81290306
https://www.cnblogs.com/shoshana-kong/p/10669889.html
Session Cookie介绍和使用的更多相关文章
- Session&Cookie 的介绍和使用
Session介绍与使用 1.Session基本介绍 Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序 ...
- cookie和session的介绍
1.cookie和session cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此产生cookie. cookie的工作原理是:由服务器产生 ...
- Asp.net MVC使用Model Binding解除Session, Cookie等依赖
上篇文章"Asp.net MVC使用Filter解除Session, Cookie等依赖"介绍了如何使用Filter来解除对于Session, Cookie的依赖.其实这个也可以通 ...
- Asp.net MVC使用Filter解除Session, Cookie等依赖
本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...
- [转]Asp.net MVC使用Filter解除Session, Cookie等依赖
本文转自:http://www.cnblogs.com/JustRun1983/p/3279139.html 本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应 ...
- [转载]JavaEE学习篇之——Session&&Cookie
原文链接: http://blog.csdn.net/jiangwei0910410003/article/details/23337043 今天继续来看看JavaWeb的相关知识,这篇文章主要来讲一 ...
- Application,Session,Cookie,ViewState和Cache区别
在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...
- 转载ASP.NET 状态管理Application,Session,Cookie和ViewState用法
转载原地址 http://www.cnblogs.com/cuishao1985/archive/2009/09/24/1573403.html ASP.NET状态管理 APPlication,Ses ...
- ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)
在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...
随机推荐
- The base and high address of the custom IP are not correctly reflected in xparameters.h in SDK
This issue has been observed in 2015.3, 2015.4, and 2015.4.1 builds of Vivado. When you create and a ...
- SharpMap在web上的应用
最近公司用SharpMap做了一个做桌面程序,它是一个开源的Gis项目,功能还可以,最大的特点就是简单易用,这里介绍下怎么在web下使用: 这次我们根据demo先了解一下如何show一个地图.这是最基 ...
- CodeForces 587 E.Duff as a Queen 线段树动态维护区间线性基
https://codeforces.com/contest/587/problem/E 一个序列, 1区间异或操作 2查询区间子集异或种类数 题解 解题思路大同小异,都是利用异或的性质进行转化,st ...
- ActiveMQ与spring整合
第一步:引用相关的jar包 <dependency> <groupId>org.springframework</groupId> <artifactId&g ...
- 创建Git 仓库及 克隆、拉取、和推送操作
打开网址: https://github.com/ 登录上自己创建的 Git账号 一. 创建Git 仓库 start a project---> 输入仓库 ...
- 机器学习实战1-K均值
本例来源于github项目:https://github.com/jakevdp/sklearn_pycon2015/blob/master/notebooks/04.2-Clustering-KMe ...
- c博客作业--分支、顺序结构
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 对于本章学习我感觉对代码有了初步的了解,一些简单的题目可以熟练掌握,但现在解决一道题目花的时间过多,不易发现那 ...
- https和http 调用过程中请求头 referrer 获取不到的问题
HTTP协议规定: Clients SHOULD NOT include a Referer header field in a (non-secure) HTTP request if the re ...
- RabbitMQ中交换机的消息分发机制
RabbitMQ是一个消息代理,它接受和转发消息,是一个由 Erlang 语言开发的遵循AMQP协议的开源实现.在RabbitMQ中生产者不会将消息直接发送到队列当中,而是将消息直接发送到交换机(ex ...
- Python3-Cookbook总结 - 第三章:数字日期和时间
第三章:数字日期和时间 在Python中执行整数和浮点数的数学运算时很简单的. 尽管如此,如果你需要执行分数.数组或者是日期和时间的运算的话,就得做更多的工作了. 本章集中讨论的就是这些主题. Con ...